简体   繁体   English

Eclipse Luna谷歌插件?

[英]Google Plugin for Eclipse Luna?

I have installed Eclipse Luna 4.4-M6. 我安装了Eclipse Luna 4.4-M6。 I tried installing the Google Plugin for Eclipse 4.3 (Kepler), but Eclipse would not allow me to install it. 我尝试安装适用于Eclipse 4.3的谷歌插件 (Kepler),但Eclipse不允许我安装它。

Is there some way to force it to install (eg by downloading it and editing some manifest or other)? 有没有办法强迫它安装(例如通过下载和编辑一些清单或其他)? Or would this be futile due to breaking changes between 4.3 and 4.4? 或者由于4.3和4.4之间的变化,这是徒劳的吗?

According to the Google Plugin for Eclipse community forum, we might be able to expect a new plugin with Luna support by mid-July. 根据谷歌插件的Eclipse社区论坛,我们可能会期待一个新的插件与Luna支持在7月中旬。

https://groups.google.com/forum/#!topic/google-plugin-eclipse/4YACQROrB2U https://groups.google.com/forum/#!topic/google-plugin-eclipse/4YACQROrB2U

It turns out there is a way to alter the manifests to allow the Google Plugin for Kepler to install in Eclipse Luna. 原来有一种方法可以更改舱单,以允许谷歌插件开普勒在Eclipse月神安装。 Contributor Ze Kritter on Google Groups has written an Apache Ant build.xml file that performs the necessary work, original here and reproduced below. Google Groups上的贡献者Ze Kritter编写了一个Apache Ant build.xml文件,该文件执行必要的工作, 原创于此并在下面复制。

It worked beautifully for me. 它对我来说很漂亮。 I have successfully run this script and installed the plugin into Luna, and - at least for GWT - it seems to work as usual. 我已成功运行此脚本并将插件安装到Luna中,并且 - 至少对于GWT - 它似乎正常工作。

According to the discussion thread on Google Groups there are some incompatibilities with the Maven plugin (I personally don't use Maven) and a new and suitably well-tested Google plugin will be coming out shortly (late July 2014). 根据Google网上论坛上的讨论主题 ,Maven插件存在一些不兼容性(我个人不使用Maven),并且很快就会推出一个经过充分测试的新谷歌插件(2014年7月下旬)。

<?xml version="1.0" encoding="UTF-8"?>

<project name="gpe.4.luna" basedir="." default="update.end">
    <property environment="env"/>

    <property name="project.base.dir" value="."/>
    <property name="project.temp.dir" value="${project.base.dir}/temp"/>
    <property name="project.plugin.dir" value="${project.base.dir}/plugin"/>
    <property name="project.plugins.dir" value="${project.plugin.dir}/plugins"/>
    <property name="e42.plugin.jar" value="${project.plugins.dir}/com.google.gdt.eclipse.platform.e42_3.6.0.v201406262229-rel-r43.jar"/>
    <property name="artifacts.jar" value="${project.plugin.dir}/artifacts.jar"/>
    <property name="content.jar" value="${project.plugin.dir}/content.jar"/>

    <property name="plugin43.zip" value="com.google.gdt.eclipse.suite.4.3.update.site_3.6.0.zip"/>
    <property name="plugin44.zip" value="com.google.gdt.eclipse.suite.4.4.update.site_3.6.0.zip"/>

    <!--
        source: http://stackoverflow.com/a/5340557/3747097
        Loads entries from a manifest file.

        @jar     The jar from where to read
        @file    A manifest file to read
        @prefix  A prefix to prepend
        @section The name of the manifest section to load
    -->
    <scriptdef name="loadManifest" language="javascript" loaderRef="sharedbuild-loaderRef">
        <attribute name="jar" />
        <attribute name="file" />
        <attribute name="prefix" />
        <attribute name="section" />
        <![CDATA[
            var jarname = attributes.get("jar");
            var filename = attributes.get("file");
            if (jarname != null && filename != null) {
                self.fail("Only one of jar or file is required");
            }
            var prefix = attributes.get("prefix");
            if (prefix == null) {
                prefix = "";
            }
            var section = attributes.get("section");

            var manifest;
            if (jarname != null) {
                var jarfile = new java.util.jar.JarFile(new java.io.File(jarname));
                manifest = jarfile.getManifest();
            } else if (filename != null) {
                manifest = new java.util.jar.Manifest(new java.io.FileInputStream(new java.io.File(filename)));
            } else {
                self.fail("One of jar or file is required");
            }

            if (manifest == null) {
                self.log("No manifest in " + jar);
            } else {
                var attributes = (section == null) ? manifest.getMainAttributes() : manifest.getAttributes(section);
                if (attributes != null) {
                    var iter = attributes.entrySet().iterator();
                    while (iter.hasNext()) {
                        var entry = iter.next();
                        // self.log("key " + entry.getKey());
                        // self.log("value " + entry.getValue());
                        project.setProperty(prefix + entry.getKey(), entry.getValue());
                    }
                }
            }
        ]]>
    </scriptdef>

    <!--
        source: http://giorgio-ferrara.blogspot.ru/2010/09/apache-ant-how-to-search-and-replace.html
    -->
    <macrodef name="replaceStringWithRegExp">
        <attribute name="string"/>
        <attribute name="searchPattern"/>
        <attribute name="replacementPattern"/>
        <attribute name="property"/>
        <sequential>
            <tokens id="id">
                <concat>
                <string value="@{string}"/>
                <filterchain>
                    <tokenfilter>
                        <replaceregex pattern="@{searchPattern}"
                                    replace="@{replacementPattern}"
                                    flags="g"/>
                    </tokenfilter>
                </filterchain>
                </concat>
            </tokens>
            <property name="@{property}" value="${toString:id}"/>
        </sequential>
    </macrodef>

    <target name="clean">
        <delete dir="${project.temp.dir}"/>
        <delete dir="${project.plugin.dir}"/>
        <delete file="${plugin44.zip}"/>
    </target>

    <target depends="clean" name="init">
        <mkdir dir="${project.temp.dir}"/>
    </target>

    <target depends="init" name="check.source">
        <condition property="plugin-not-found">
            <not>
                <available file="${plugin43.zip}"/>
            </not>
        </condition>
    </target>

    <target depends="check.source" name="get.source" if="${plugin-not-found}">
        <get src="https://commondatastorage.googleapis.com/eclipse_toolreleases/products/gpe/release/3.6.0/4.3/com.google.gdt.eclipse.suite.4.3.update.site_3.6.0.zip" dest="."/>
    </target>

    <target depends="check.source, get.source" name="unzip.source">
        <unzip src="${plugin43.zip}" dest="${project.plugin.dir}"/>
    </target>

    <target depends="unzip.source" name="update.manifest">
        <checksum file="${e42.plugin.jar}" property="original.md5"/>
        <loadManifest jar="${e42.plugin.jar}" prefix="e42.mf."/>
        <replaceStringWithRegExp string="${e42.mf.Require-Bundle}"
            searchPattern="(.*);bundle-version=&quot;\[3.8.0,3.10.0\)&quot;(.*)"
            replacementPattern="\1\2"
            property="Require-Bundle"/>
        <!--
        <echo>${e42.mf.Require-Bundle}</echo>
        <echo>${Require-Bundle}</echo>
        -->
        <jar update="true" file="${e42.plugin.jar}">
            <manifest>
                <attribute name="Require-Bundle" value="${Require-Bundle}"/>
            </manifest>
        </jar>
        <checksum file="${e42.plugin.jar}" property="updated.md5"/>
        <!--
        <echo>${original.md5}</echo>
        <echo>${updated.md5}</echo>
        -->
    </target>

    <target depends="update.manifest" name="update.artifacts">
        <delete includeemptydirs="true">
            <fileset dir="${project.temp.dir}" includes="**/*"/>
        </delete>
        <unzip src="${artifacts.jar}" dest="${project.temp.dir}"/>
        <replaceregexp byline="true">
            <regexp pattern="${original.md5}"/>
            <substitution expression="${updated.md5}"/>
            <fileset dir="${project.temp.dir}"/>
        </replaceregexp>
        <zip destfile="${artifacts.jar}" basedir="${project.temp.dir}"/>
    </target>

    <target depends="update.artifacts" name="update.content">
        <delete includeemptydirs="true">
            <fileset dir="${project.temp.dir}" includes="**/*"/>
        </delete>
        <unzip src="${content.jar}" dest="${project.temp.dir}"/>
        <replaceregexp byline="true">
            <regexp pattern="name='org.eclipse.core.runtime' range='\[3.8.0,3.10.0\)'"/>
            <substitution expression="name='org.eclipse.core.runtime' range='0.0.0'"/>
            <fileset dir="${project.temp.dir}"/>
        </replaceregexp>
        <zip destfile="${content.jar}" basedir="${project.temp.dir}"/>
    </target>

    <target depends="update.content" name="create.updated.plugin">
        <zip destfile="${plugin44.zip}" basedir="${project.plugin.dir}"/>
        <delete dir="${project.temp.dir}"/>
        <delete dir="${project.plugin.dir}"/>
    </target>

    <target depends="create.updated.plugin" name="update.end">
        <echo message="plugin rebuild success"/>
    </target>

</project>

I'll add the words Eclipse Mars here, so this solution can be found by searching and potentially adapted for the June 2015 release of Eclipse. 我将在这里添加Eclipse Mars这个词,因此可以通过搜索找到这个解决方案,并可能适用于2015年6月发布的Eclipse。

This seems to be recently resolved. 这似乎最近得到了解决。

I didn't find the plugin in the Marketplace as of writing this, but there's an update site: https://dl.google.com/eclipse/plugin/4.4 我写这篇文章时没有在Marketplace中找到该插件,但是有一个更新站点: https//dl.google.com/eclipse/plugin/4.4

You can read more about this at https://developers.google.com/eclipse/docs/install-eclipse-4.4 您可以访问https://developers.google.com/eclipse/docs/install-eclipse-4.4了解更多相关信息

Google刚刚发布了针对Eclipse Luna的官方SDK: https//developers.google.com/eclipse/docs/getting_started

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM