2016-06-17 91 views
12

這篇文章是關於從源代碼構建整個Eclipse IDE的 - 更具體的說明如何指定要爲其構建可執行文件的目標操作系統。從頭構建Eclipse IDE - 如何指定目標操作系統?

enter image description here

我發現下面的教程來引導我通過構建過程:http://www.vogella.com/tutorials/EclipsePlatformDevelopment/article.html

尤其是章教程13是很有幫助的。我將在這裏描述需要逐一採取的步驟 - 因此您不需要閱讀vogella教程。

需要的軟件:

顯然,你需要你的(Windows)中的機器上已安裝以下軟件:

  • 的Git
  • Maven版本3.3.1(請確保斌文件夾中你將提取Maven添加到PATH中,安裝說明請參閱https://maven.apache.org/install.html
  • Oracle 1.8 JDK或更高版本(不要忘記設置JAVA_HOME environmen變量t)

現在你已經準備好開始:

第1步:

C:\上創建一個新的文件夾。我們將其命名爲C:\myEclipse。這將成爲我們拉取最新Eclipse版本的Git存儲庫的文件夾。

第2步:

打開Windows cmd外殼具有管理員權限(右鍵點擊圖標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 

經過一段時間,構建應該完成。

STEP 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參數添加到第4步)。您是否僅僅爲一個操作系統目標(最好是Windows 64位)成功構建Eclipse IDE?與面向所有操作系統的一般構建過程相比,構建是否更快? PS:我還有一些與Eclipse「從頭開始構建」主題相關的其他問題。如果你有興趣:

讓我們大家團結起來,建立在Eclipse IDE自己 - 它調整到我們的需求;-)


編輯:

Mr/Mss。 Zapl寫了一個有趣的評論。他/她認爲,-Dnative的說法是不正確的,在他/她閱讀以下鏈接: http://comments.gmane.org/gmane.comp.ide.eclipse.cbi.devel/896

希望我們能更接近現在答案:-)


最後編輯:

突然間這個問題引起了社會的關注。我在短時間內得到了很多建議/答案。我現在無法驗證它們中的每一個,因爲構建過程大約需要2個小時。

我還剩19個小時可以獲得50點獎勵。請讓我知道,如果您在自己的機器上成功複製了此問題的STEPS 1..5,併成功地從開始爲一個特定的操作系統從頭開始構建Eclipse IDE。我將授予您的獎金:-)

+1

'EXEC返回:1'意味着從Maven構建過程調用Ant構建過程中試圖執行一些程序,但它返回一個錯誤代碼。此程序可能打印的實際錯誤消息應該在日誌中更早出現,並且可能需要一些額外的-debugverboseidontknowtheright命令選項才能看到。或者嘗試在控制檯中手動執行buildSWT.xml:1012中的命令。 – zapl

+0

如何執行此操作:「嘗試從控制檯中手動執行buildSWT.xml中的命令:1012」?我對maven構建過程的新手太多了:-) –

+2

我的意思是從[exec task](https://ant.apache.org/faq.html#batch-shell-execute)執行命令windows cmd窗口(這一步嘗試執行的命令似乎是'cmd/c'$ {build_dir}/$ {build_file}'$ {swt.arch} $ {xulrunner_target} install $ {clean} '但你必須弄清楚所有這些$佔位符解決的問題)。不過,我認爲在閱讀http://comments.gmane.org/gmane.comp.ide.eclipse.cbi.devel/896之後,「-Dative」是錯誤的選擇,因爲它似乎比標準構建更多的東西。 – zapl

回答

3

該代碼片段取自導出到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> 
.. 
.. 

編輯

正如在評論中提到我跟着你的腳步,並出現了一些問題。我現在解決了大部分問題。如果別人也得到很多錯誤,這裏有一些解決方案。

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

  • 提示:爲了加快構建,您可以添加例如「-T 4」到mvn命令以啓用並行構建。我終於用> MVN結束清理覈實-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中的錯誤,並停止了以下問題。 整個項目似乎在許多部分配置錯誤,到目前爲止我找不到更好的解決方案。人們應該記住黃金法則,不要爲了避免這些問題而犯任何破壞構建的東西。也許問題會在回購幾次後得到解決。

+0

謝謝Stefan, 這段代碼究竟應該在'.pom'中插入?我在哪裏可以找到正確的'.pom'文件,我需要插入此代碼段? 如果你在你的系統上試用它將會很棒。你有從頭開始構建Eclipse的經驗嗎? –

+0

對不起,我不知道你的項目結構(現在沒有幾個小時來測試它;也許在週末)。這個片段是一個用於使用.product文件導出的eclipse插件的pom.xml項目的一部分。這個pom是該項目的最高級別,是所有較低級別poms的家長。因此,您應該嘗試將其添加到最高級別的pom中,以檢查它是否爲您執行任何操作。 –

+0

我的'項目結構'是通過所有步驟1 .. 5的結果。我沒有改變任何代碼(還)。 –

1

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

的ARG是-Dnative=win32.win32.x86_64

+0

非常感謝!我正在嘗試它。它似乎正在建設很好。我會讓你知道如果構建完成沒有錯誤:-) –

+0

你知道如何告訴'maven'構建者你有多個CPU核心來完成這項工作嗎? –

+0

不幸的是,'-Dnative = win32.win32.x86_64'參數導致了一些奇怪的錯誤。 –

1

但是也有一些在這裏修建

  1. SWT當地人多個項目。 (-Dative =)
  2. IDE。 (獨立平臺)

SWT當地人建(由SWT隊)每天在19:00 EST/EDT每天推到eclipse.platform.swt.binaries.git回購。這個構建需要相當多的依賴項,比如visual studio,xulrunner,WebKit等。爲了嘗試構建,我不建議您嘗試這樣做。

CBI(通用構建基礎設施)eclipse插件是否構建和簽名和打包。這個過程是獨立於平臺的。

CBI生產開始於美國東部時間每天上午20:00,swt.binaries僅在包裝過程中提取。整個過程大概需要5分鐘。所以如果你只指定一個目標來構建,我並不期待有太大的區別。

+0

非常感謝您的回答。我贊成,因爲我看到你說的話有一定的潛力。但我仍然很難完全理解它。你能澄清一下嗎?例如,這意味着什麼:「IDE構建包裝的本地人」? 我是Eclipse構建過程的新手 - 也可能是本文的一些讀者。請嘗試解釋它,就好像您正在與新手交談一樣;-) –

+0

Ide包由cbi(通用構建基礎結構)創建。此cbi從Swt.binaries回購中獲取Swt本機,並將其作爲插件片段添加到IDE包中 – Sravan

+0

Hi @SravanKumarLakkimsetti,我只是通知你,我對我的問題做了最終編輯。 :-) –

1

要針對你的父母來指定目標環境的pom.xml文件只是一個單一的OS(見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構建,而不是Maven的/第谷的螞蟻財產是configs,例如,-Dconfigs="win32, win32, x86"

FYI:Eclipse Platform CI which generates the Eclipse SDK archives

+0

非常感謝。明天早上我會試試看。 –

+0

嗨@howlger,我只是通知你,我對我的問題做了最後的編輯。 :-) –

+0

嗨@howlger。我認爲你最接近解決方案。如果你告訴我你會在你的機器上試用這個解決方案(並告知我們結果),那麼我現在就會獎勵你的賞金。我只有30分鐘的時間將獎賞獎勵給某人。 –