【问题标题】:Building Eclipse IDE from scratch - how to specify the target OS?从头开始构建 Eclipse IDE - 如何指定目标操作系统?
【发布时间】:2026-02-10 18:25:01
【问题描述】:

这篇文章是关于从源代码构建整个 Eclipse IDE - 尤其是如何指定要为其构建可执行文件的目标操作系统。

我找到了以下教程来指导我完成构建过程:http://www.vogella.com/tutorials/EclipsePlatformDevelopment/article.html

该教程的第 13 章尤其有用。我将在这里一一描述需要采取的步骤 - 因此您无需阅读 vogella 教程。

需要的软件:

显然您需要在 (Windows) 机器上安装以下软件:

  • 吉特
  • Maven 版本 3.3.1(确保将提取 Maven 的 bin 文件夹添加到 PATH。有关安装说明,请参阅https://maven.apache.org/install.html
  • Oracle 1.8 JDK 或更高版本(不要忘记设置 JAVA_HOME 环境变量)

现在您可以开始了:

第 1 步:

C:\ 磁盘中创建一个新文件夹。让我们将其命名为C:\myEclipse。这将是我们提取最新 Eclipse 版本的 Git 存储库的文件夹。

第 2 步:

使用管理员权限打开 Windows cmd shell(如果您在桌面上创建了一个,请右键单击 cmd 图标,然后选择 open with admin rights)。通过命令cd C:\myEclipse 转到该文件夹​​。现在输入以下命令:git config --system core.longpaths true。这会通知 Git 存储库中可能出现长名称。忘记这个命令,以后会出错。

第 3 步:

克隆 Git 存储库:

git clone -b master --recursive git://git.eclipse.org/gitroot/platform/eclipse.platform.releng.aggregator.git

现在您应该耐心等待将所有源代码复制到您的本地文件夹。

第 4 步:

终于是开始构建的时候了。构建过程已经花费了几个小时,所以跳过单元测试是明智的。因此不要忘记添加-DskipTests 参数。这是开始构建的命令:

mvn clean verify -DskipTests

几个小时后,构建应该完成。

第 5 步:

构建的结果现在应该在以下文件夹中:

C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.releng.tychoeclipsebuilder\sdk\target\products

请注意,Eclipse IDE 是为所有可能的目标机器构建的。 32 位 Windows、64 位 Windows、Macintosh、Linux……难怪需要几个小时!我只想为一个目标构建 - 例如我的 64 位 Windows 机器。这有望显着减少构建时间,让我能够更快地验证代码更改。

有谁知道如何做到这一点?


编辑:

我已将参数-Dnative=win32.win32.x86_64 添加到构建命令中。不幸的是,我在 15 到 20 分钟后收到错误消息。这一次,我也添加了参数-X,以获取调试信息:

                      ...

[INFO] equinox-sdk ........................................ SKIPPED
[INFO] org.eclipse.rcp.id ................................. SKIPPED
[INFO] org.eclipse.rcp.sdk.id ............................. SKIPPED
[INFO] org.eclipse.platform.ide ........................... SKIPPED
[INFO] org.eclipse.platform.sdk ........................... SKIPPED
[INFO] org.eclipse.sdk.ide ................................ SKIPPED
[INFO] eclipse-junit-tests ................................ SKIPPED
[INFO] eclipse.platform.repository ........................ SKIPPED
[INFO] platform-aggregator ................................ SKIPPED
[INFO] -----------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] -----------------------------------------------------------------------
[INFO] Total time: 23:54 min
[INFO] Finished at: 2016-06-19T18:12:14+02:00
[INFO] Final Memory: 668M/3263M
[INFO] -----------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8: run (natives) on project org.eclipse.swt.win32.win32.x86_64: An Ant BuildException has occured: The following error occurred while executing this line:
[ERROR] C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:915: The following error occurred while executing this line:
[ERROR] C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:1012: exec returned: 1
[ERROR] around Ant part ...<ant antfile="build.xml" target="build_libraries"/>... @ 4:54 in C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt.binaries\bundles\org.eclipse.swt.win32.win32.x86_64\target\antrun\build-main.xml
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:
    run (natives) on project org.eclipse.swt.win32.win32.x86_64:
        An Ant BuildException has occured:
            The following error occurred while executing this line:
            C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:915: The following error occurred while executing this line:
            C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:1012: exec returned: 1 around Ant part ...<ant antfile="build.xml" target="build_libraries"/>... @ 4:54 in C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt.binaries\bundles\org.eclipse.swt.win32.win32.x86_64\target\antrun\build-main.xml
                at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
                at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
                at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
                at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
                at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
                at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
                at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
                at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
                at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
                at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
                at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
                at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
                at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
                at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
                at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
                at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    Caused by:
        org.apache.maven.plugin.MojoExecutionException:
            An Ant BuildException has occured:

                The following error occurred while executing this line:
                C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:915:

                The following error occurred while executing this line:
                C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:1012: exec returned: 1 around Ant part ...<ant antfile="build.xml" target="build_libraries"/>... @ 4:54 in C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt.binaries\bundles\org.eclipse.swt.win32.win32.x86_64\target\antrun\build-main.xml
                    at org.apache.maven.plugin.antrun.AntRunMojo.execute(AntRunMojo.java:342)
                    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(Default BuildPluginManager.java:134)
                    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
                    ... 20 more
                Caused by: C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt.binaries\bundles\org.eclipse.swt.win32.win32.x86_64\target\antrun\build-main.xml

                :4: The following error occurred while executing this line:
                C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml

                :915:The following error occurred while executing this line:
                C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:1012: exec returned: 1
                    at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:568)
                    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:443)
                    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
                    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                    at java.lang.reflect.Method.invoke(Method.java:498)
                    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
                    at org.apache.tools.ant.Task.perform(Task.java:348)
                    at org.apache.tools.ant.Target.execute(Target.java:435)
                    at org.apache.tools.ant.Target.performTasks(Target.java:456)
                    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
                    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
                    at org.apache.maven.plugin.antrun.AntRunMojo.execute(AntRunMojo.java:313)
                    ... 22 more
                Caused by: C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml

                :915: The following error occurred while executing this line:
                C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:1012: exec returned: 1
                    at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:568)
                    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:443)
                    at org.apache.tools.ant.taskdefs.CallTarget.execute(CallTarget.java:105)
                    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
                    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                    at java.lang.reflect.Method.invoke(Method.java:498)
                    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
                    at org.apache.tools.ant.Task.perform(Task.java:348)
                    at org.apache.tools.ant.Target.execute(Target.java:435)
                    at org.apache.tools.ant.Target.performTasks(Target.java:456)
                    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
                    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
                    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
                    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
                    ... 33 more

                Caused by: C:\myEclipse\eclipse.platform.releng.aggregator\eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml:1012: exec returned: 1
                    at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:643)
                    at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:669)
                    at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:495)
                    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
                    at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
                    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                    at java.lang.reflect.Method.invoke(Method.java:498)
                    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
                    at org.apache.tools.ant.Task.perform(Task.java:348)
                    at org.apache.tools.ant.Target.execute(Target.java:435)
                    at org.apache.tools.ant.Target.performTasks(Target.java:456)
                    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
                    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
                    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
                    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
                    ... 46 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command

[ERROR]   mvn <goals> -rf :org.eclipse.swt.win32.win32.x86_64

我仍然没有答案,所以我开始了赏金。请在您的机器上重现第 1 步直到 第 5 步(在第四步中添加 -Dnative=win32.win32.x86_64 参数)。您是否为一个操作系统目标(最好是 Windows 64 位)成功构建了 Eclipse IDE?与针对所有操作系统的一般构建过程相比,构建速度是否更快?

PS:我还有一些与 Eclipse“从头开始构建”主题相关的其他问题。如果您有兴趣:

让我们大家团结起来自己构建 Eclipse IDE - 并根据我们的需要对其进行调整 ;-)


编辑:

先生/女士。 Zapl 写了一个有趣的评论。他/她在阅读以下链接后认为-Dnative 参数不正确: http://comments.gmane.org/gmane.comp.ide.eclipse.cbi.devel/896

希望我们现在能更接近答案:-)


最终编辑:

这个问题突然引起了社区的注意。我在短时间内得到了很多建议/答案。我现在无法验证每一个,因为构建过程大约需要 2 个小时。

我还有 19 小时的时间来奖励 50 分赏金。如果您在自己的机器上成功地复制了这个问题的 STEPS 1..5,并成功地为一个特定的操作系统从头开始构建 Eclipse IDE,请告诉我。我会给你奖金:-)

【问题讨论】:

  • exec returned: 1 表示从 maven 构建过程调用的 ant 构建过程试图执行某些程序,但它返回了错误代码。该程序可能打印的实际错误消息应该出现在日志的前面,并且可能需要一些额外的 -debugverboseidontknowtheright 命令选项才能显示。或者尝试在控制台中手动执行 buildSWT.xml:1012 中的命令。
  • 我该怎么做:“尝试在控制台中手动执行来自 buildSWT.xml:1012 的命令”?我对 Maven 构建过程太陌生了 :-)
  • 我的意思是在 windows cmd 窗口中从 exec task 执行命令(此步骤尝试执行的命令似乎类似于 cmd /c '${build_dir}/${build_file}' ${swt.arch} ${xulrunner_target} install ${clean} 但你必须弄清楚所有这些 $placeholders 解决的问题)。但是,我认为在阅读 comments.gmane.org/gmane.comp.ide.eclipse.cbi.devel/896 之后,-Dnative 是错误的选择,因为它似乎比标准构建构建了更多的东西。
  • 谢谢先生/女士。扎普尔。我已将您的有趣评论作为 EDIT 添加到我的问题中。希望这能让我们更接近解决方案。
  • 从异常堆栈跟踪中,看起来构建失败,因为Maven 未能清理某个进程正在使用的输出目录。您能否按照 Compass 的建议手动删除所有目标目录并重新运行您的构建命令?

标签: java eclipse git maven build


【解决方案1】:

这个 sn-p 取自导出到 win32.win32.x86_64 的工作 pom.xml。 也许您的项目不需要某些部分,但将其添加到您的 pom 文件中可能是一个很好的起点。

..
..
<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-maven-plugin</artifactId>
            <version>0.20.0</version>
            <extensions>true</extensions>
        </plugin>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <version>0.20.0</version>
            <configuration>
                <resolver>p2</resolver>
                <environments>
                    <environment>
                        <os>win32</os>
                        <ws>win32</ws>
                        <arch>x86_64</arch>
                    </environment>
                </environments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-compiler-plugin</artifactId>
            <version>0.20.0</version>
            <configuration>
                <compilerArgument>-err:-forbidden</compilerArgument>
            </configuration>
        </plugin>
    </plugins>
</build>
..
..

编辑

正如 cmets 中所述,我按照您的步骤进行操作,但遇到了一些问题。我现在解决了大部分问题。如果其他人也遇到很多错误,这里有一些解决方案。

  • 在文件 eclipse.pde.ui/pom.xml 第 19 行:版本是 4.6.0-SNAPSHOT,但必须是 4.7.0-SNAPSHOT

  • 提示:要加快构建速度,您可以添加例如将“-T 4”添加到 mvn 命令以启用并行构建。最后我以 >mvn clean verify -DSkipTests -T 4 -Dnative=win32.win32.x86_64

  • 结束

在此修复之后,我能够运行,直到遇到最初问题中提到的相同错误。 我去了项目文件夹 \eclipse.platform.swt.binaries\bundles\org.eclipse.swt.win32.win32.x86_64 并开始了 Ant 构建(Apache Ant 版本 1.9.7),它没有错误地完成。但是当它由 Maven 构建执行时,我得到了同样的错误。 因此,我检查了文件 \eclipse.platform.swt\bundles\org.eclipse.swt\buildSWT.xml 的第 915 行和第 1012 行。在两行中设置 failonerror="false" (默认设置为“true”)后,我能够继续构建。 我认为这是一个非常糟糕的解决方案,它不应该是禁用此类测试的问题的最终解决方案。

最后,我以项目 org.eclipse.pde.build.tests 中的错误结束,并停止关注这些问题。 整个项目似乎在许多部分配置错误,到目前为止我找不到更好的解决方案。人们应该记住黄金法则,不要提交任何破坏构建的东西以避免此类问题。也许在对 repo 进行几次更新后问题就会得到解决。

【讨论】:

  • 谢谢Stefan,这个sn-p到底应该如何插入.pom?我在哪里可以找到正确的.pom 文件,我需要在其中插入这个sn-p?如果你在你的系统上试用它会很棒。您有从头开始构建 Eclipse 的经验吗?
  • 对不起,我不知道你的项目结构(现在没有几个小时来测试它;也许在周末)。这个 sn-p 是 pom.xml 项目的一部分,该项目用于使用 .product 文件导出的 eclipse 插件。这个 pom 位于项目的顶层,是所有较低级别 pom 的父 pom。因此,您应该尝试将其添加到*别的 pom 中,以检查它是否为您做了任何事情。
  • 我的“项目结构”是完成所有步骤 1 .. 5 的结果。我还没有对代码进行任何更改。
  • 嗨@StefanDolezel,我只是通知您,我对我的问题进行了最终编辑。 :-)
  • 嗨@StefanDolezel,我刚刚在最后一分钟向你颁发了赏金。希望这个周末你能在你的电脑上进行测试;-)
【解决方案2】:

这里建了多个项目

  1. SWT 本地人。 (-Dnative=)
  2. IDE。 (独立于平台)

每天美国东部时间/美国东部时间 19:00 (由 SWT 团队)构建 SWT 原生并推送到 eclipse.platform.swt.binaries.git 存储库。此构建需要相当多的依赖项,例如 Visual Studio、xulrunner、WebKit 等。为了尝试构建,我不建议您尝试此操作。

CBI(Common Build Infrastructure) 负责 Eclipse 插件的构建、签名和打包。此过程与平台无关。

CBI 构建于每天 20:00 EST/EDT 开始,swt.binaries 仅在打包过程中被提取。整个包装过程大概需要5分钟左右。因此,如果您只指定 1 个要构建的目标,我预计不会有太大的不同。

【讨论】:

  • 非常感谢您的回答。我赞成它,因为我看到你所说的一些潜力。但我仍然很难完全理解它。你能澄清一下吗?例如,这意味着什么:“IDE 构建选择了本地进行打包”?我是 Eclipse 构建过程的新手——可能也是这篇文章的一些读者。请试着解释一下,就好像你在和一个新手说话一样;-)
  • Ide 包由 cbi(通用构建基础设施)创建。此 cbi 从 Swt.binaries 存储库中提取 Swt 本机,并将其作为插件片段添加到 IDE 包中
  • 嗨@SravanKumarLakkimsetti,我只是告诉你我对我的问题做了最后的编辑。 :-)
【解决方案3】:

要仅针对单个操作系统,您必须在父 pom.xml 文件中指定目标环境(请参阅Tycho - Target runtime environment):

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <version>${tycho-version}</version>
    <configuration>
        <environments>
            <environment>
                <os>win32</os>
                <ws>win32</ws>
                <arch>x86</arch>
            </environment>
        <environments>
    </configuration>
</plugin>

如果您使用 PDE Build 而不是 Maven/Tycho,则 Ant 属性为 configs,例如 -Dconfigs="win32, win32, x86"

仅供参考:Eclipse Platform CI which generates the Eclipse SDK archives

【讨论】:

  • 非常感谢。明天早上我会试试看。
  • 嗨@howlger,我只是通知你我对我的问题进行了最后的编辑。 :-)
  • 嗨@howlger。我认为您最接近解决方案。如果您向我保证您将在您的机器上试用此解决方案(并告知我们结果),那么我将立即奖励您。我只有 30 分钟的时间将赏金奖励给某人。
  • 嗨@k-mulier。我使用 PDE Build 几次,而不是 Maven/Tycho。所以请随意给别人赏金。
【解决方案4】:

来自https://wiki.eclipse.org/Platform-releng/Platform_Build#Building_natives

您可以选择传递带有以下选项之一的 -Dnative= 参数来为指定的原生编译原生。

  • cocoa.macosx.x86
  • cocoa.macosx.x86_64
  • gtk.linux.x86
  • gtk.linux.x86_64
  • win32.win32.x86
  • win32.win32.x86_64
  • win32.wce_ppc.arm

参数是-Dnative=win32.win32.x86_64

【讨论】:

  • 非常感谢!我现在正在尝试。看起来它的建设很好。如果构建完成且没有错误,我会通知您:-)
  • 你知道如何告诉maven builder 你有多个 CPU 内核来完成这项工作吗?
  • 不幸的是,-Dnative=win32.win32.x86_64 参数导致了一些奇怪的错误。
  • 我对我的问题做了 EDIT :-)
  • 我在解释 Ant Build 错误方面非常糟糕。如果仍然没有意义,您可能应该使用详细的错误日志记录并完全作为一个单独的问题运行它。