Eclipse PDE headless构建修改源目录和MANIFEST.MF



问题

从一些OSGi捆绑包中,我正在使用PDE headless特性构建创建一个p2更新站点。我不想复制整个源树(如果可以避免的话),所以我将buildDirectory属性指向我的源的位置。

我遇到的一般问题是,PDE构建将构建工件散布在整个源目录中(不像所有其他像样的构建工具那样,构建工件存储在单独的位置,例如Maven的target文件夹)。我可以接受这种情况,但更令人讨厌的是,PDE构建会修改每个编译包的MANIFEST.MF文件。

MANIFEST.MF文件唯一真正的变化是

Bundle-Version: 1.0.0.qualifier

被重写为

Bundle-Version: 1.0.0.<yyyyMMddhhmm>

除此之外,整个文件都被重新格式化。当然,将文件重写为应该在组装的jar中结束的文件是正确的,但修改后的清单应该是IMHO而不是覆盖源清单。

一个可能的解决方案

有人知道是否有一种方法可以告诉PDE无头构建将所有构建工件发送到与源文件分离的位置吗?

细节细节

请在下面找到有关我的构建的详细信息。

我如何称PDE为无头

这是我用来调用PDE无头构建的命令:

java 
  -jar 
  <prefix>/eclipse/3.8.1/SDK/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar 
  -application 
  org.eclipse.ant.core.antRunner 
  -buildfile 
  <prefix>/eclipse/3.8.1/SDK/plugins/org.eclipse.pde.build_3.8.1.v20120725-202643/scripts/build.xml 
  -data 
  <prefix>/target/pde_workspace 
  -Dbuilder=<prefix>/eclipse/3.8.1/SDK/plugins/org.eclipse.pde.build_3.8.1.v20120725-202643/templates/headless-build 
  -DtopLevelElementId=org.example.myproject.feature 
  -DtopLevelElementType=feature 
  -DbuildDirectory=<prefix>/source 
  -DbaseLocation=<prefix>/targetPlatform 
  -DjavacSource=1.7 
  -DjavacTarget=1.7 
  -DcompilerArg=-g 
  -DbuildLabel=output 
  -DarchivePrefix=org.example.myproject 
  -DbuildId=org.example.myproject.feature 
  -DarchivesFormat=*,*,* - folder 
  -Dp2.gathering=true 
  -Dp2.build.repo=<prefix>/target/update-site 
  -DskipMirroring=true 
  -DcollectingFolder=<prefix>/target/tmp

我希望添加-DcollectingFolder可以将所有构建工件重定向到此文件夹,但它是空的。

PDE无头文档

PDE无头构建的文档是全面的,但有些不精确。例如,对于其众多选项之一,它说:

buildType:构建类型,通常类似于I、N、M等

我能找到的文件是:

  • http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.pde.doc.user%2Freference%2Fpde_builder_config.htm

有人知道PDE无头构建的其他文档吗?

您想要设置属性buildTempFolderfeature.temp.folder。我不相信这些属性在任何地方都有记录。

如果你熟悉ant,那么发现它的方法就是查看为插件生成的build.xml文件。在<init>目标中,如果设置了buildTempFolder,则构建最终将设置类似的内容

build.result.folder=${buildTempFolder}/plugins/org.example.plugin_1.2.3.201411110853`

如果未设置buildTempFolder,则默认值为${basedir}(插件的根文件夹)。

这个build.result.folder将是大多数编译.class文件的目标(请参阅<@dot>目标),并且在修改清单之前,清单将被复制到那里(请参见<publish.bin.parts>目标)。如果您使用customBuildCallbacks,那么在调用自定义回调之前,所有内容都将在此处暂存。

feature.temp.folder类似于buildTempFolder,但会影响功能而不是插件。

最新更新