用tycho更新更新网站

时间:2013-12-10 08:14:12

标签: maven tycho update-site

我正在使用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。

尽管构建成功,但我的更新站点保持不变。 [/编辑]

1 个答案:

答案 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>