【问题标题】:Eclipse PDE headless builds modifies source dirs and MANIFEST.MFEclipse PDE 无头构建修改源目录和 MANIFEST.MF
【发布时间】:2014-09-08 12:12:12
【问题描述】:

问题

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

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

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

Bundle-Version: 1.0.0.qualifier

被改写为

Bundle-Version: 1.0.0.<yyyyMMddhhmm>

除此之外,整个文件都被重新格式化。当然,将文件重写为最终应包含在组装 jar 中的文件是正确的,但修改后的清单应该恕我直言覆盖源清单。

可能的解决方案?

有人知道是否有办法告诉 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 等。

我能找到的文档是这样的:

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

【问题讨论】:

  • 构建在构建目录中做了很多乱七八糟的事情,所以从头开始复制所有源代码是正常的。
  • @greg-449 我知道,这是我们通常所做的,但是每次都复制一个 really 大的源目录(> 300 个包)真的很愚蠢你建立。
  • 对不起,但我真的认为这是必须要做的。我认为这是由自动构建使用的,该构建将通过从源代码控制系统中检出代码来创建目录。

标签: eclipse eclipse-pde headless


【解决方案1】:

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

如果您熟悉 ant,发现这一点的方法是查看为插件生成的 build.xml 文件。在&lt;init&gt; 目标中,如果设置了 buildTempFolder,那么构建最终会设置类似

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

如果没有设置buildTempFolder,那么默认值为${basedir},即插件的根文件夹。

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

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

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多