我正在使用tycho来构建Eclipse RCP应用程序。到目前为止,我们一直在使用Eclipse的构建系统,但我想使用tycho来构建夜间快照。到目前为止,在我的公司,我们一直在发布这个带有更新站点的RCP应用程序,我们在Eclipse中的site.xml文件视图中使用“Build All”进行更新。我试图在http://www.vogella.com/articles/EclipseTycho/article.html之后用tycho复制这种行为。
我的问题是,尽管在我们现有的更新站点中放置了一个pom.xml,但是在现有的更新站点内,在目标目标中构建(使用mvn clean verify或mvn install)时,tycho会生成一个新的更新站点/。如果我连续两次构建,第一个新生成的更新站点将被替换,而我希望它更新。这对我来说似乎是可行的,因为生成的JAR没有相同的时间戳。
因此,我的问题是:我如何模仿Eclipse的“Build All”行为来更新site.xml,artifacts.jar和contents.jar文件(以便我的客户端看到和更早的边缘更新站点上的版本)?作为奖励,我还希望更新现有的更新站点,在target /!
中生成一个新的站点我现有的更新站点中的pom.xml非常标准:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<relativePath>../../daily-build-repo/blah/pom.xml</relativePath>
<groupId>com.mycompany</groupId>
<artifactId>product_name</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>com.mycompany.updateSites.nightly</artifactId>
<packaging>eclipse-repository</packaging>
</project>
[编辑] oberlies'answer让我取得了进步,但它尚未奏效。为了使他的答案更精确,让我补充一点,我将他的代码添加到maven构建的存储库中的pom.xml中,而不是我想要发布的那个(因此在主pom中没有引用我要发布的更新站点) )。这似乎可以在构建结束时起作用:
[INFO] Mirroring to path/to/existing/update/site
然后我收到一个大警告:
[WARNING] Mirror tool: Problems resolving provisioning plan.: [Unable to satisfy dependency from com.mycompany.blah to org.eclipse.ltk.ui.refactoring 0.0.0; Unable to satisfy dependency from com.mycompany.blah to org.eclipse.ltk.ui.refactoring 0.0.0; ...]
所有缺少的依赖项都是外部库,而不是我公司的库(已构建)。由于所有图书馆都无法解决,我想我做错了。奇怪的是,如代码片段所示,我错过了同一个库的依赖关系两次:来自com.mycompany.blah的plugin.xml文件的版本(3.7.0)和版本0.0.0。
尽管构建成功,但我的更新站点保持不变。 [/编辑]
答案 0 :(得分:2)
Maven中的一个约定是仅将构建输出目录(target/
)用于输出,即现有文件不会影响构建结果。 (恕我直言,这很有道理。)
因此,要将内容添加到现有的p2存储库,您需要一个两步的方法:首先将新内容构建为新的单独的p2存储库,然后将新内容复制到现有存储库(也称为“更新站点”) 。你甚至可以在同一个版本中执行此操作:
eclipse-repository
模块以聚合新内容。在该模块中,添加以下构建步骤:
<plugin>
<groupId>org.eclipse.tycho.extras</groupId>
<artifactId>tycho-p2-extras-plugin</artifactId>
<version>${tycho-extras-version}</version>
<executions>
<execution>
<id>add-to-update-site</id>
<phase>install</phase>
<goals>
<goal>mirror</goal>
</goals>
<configuration>
<source>
<repository>
<url>${project.build.directory}/repository</url>
</repository>
</source>
<destination>path/to/existing/update/site</destination>
<append>true</append>
</configuration>
</execution>
</executions>
</plugin>