2013-12-10 78 views
2

我使用tycho构建Eclipse RCP应用程序。到目前为止,我们一直在使用Eclipse的构建系统,但我想使用tycho做每晚构建快照。直到现在,在我的公司,我们已经发布了带有更新站点的RCP应用程序,我们使用Eclipse中的site.xml文件视图中的“全部构建”进行更新。我试图用tycho复制这个行为,遵循http://www.vogella.com/articles/EclipseTycho/article.html就地更新tycho更新网站

我的问题是,尽管在我们现有的更新站点中放置了一个pom.xml,tycho在生成(使用mvn clean verify或mvn install),在现有更新站点内的目录中生成新的更新站点目标/。如果我连续构建两次,第一个新生成的更新站点将被替换,而我希望它是已更新。对我来说这似乎是可行的,因为生成的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文件和版本0.0.0的版本(3.7.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>