问题
从一些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无头构建的其他文档吗?
您想要设置属性buildTempFolder
和feature.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,但会影响功能而不是插件。