为RAP和RCP风格的功能构建单个更新站点

时间:2017-12-14 08:42:18

标签: eclipse maven tycho eclipse-rap update-site

我有一个单源RCP / RAP Eclipse功能项目的构建,它使用maven配置文件来构建RAP或RCP包,片段和功能。

这种方法运作得相当好。如果我将更新站点项目作为模块包含在上述构建的父POM中,我还可以使用" eclipse-update-site"轻松构建特定于平台的更新站点。 (或" eclipse-repository")包装。

然而,我想知道,如果有办法

  1. 构建RCP目标平台>发布到本地仓库
  2. 构建RAP目标平台>发布到本地仓库
  3. 为RCP运行构建(来自步骤1的目标平台)>发布到本地仓库
  4. 为RAP运行构建(来自步骤2的目标平台)>发布到本地仓库
  5. 仅针对更新站点运行构建,包括RAP和RCP的功能(不编译任何内容,仅从1 + 2组装)
  6. 我可以成功执行步骤1-4,但不是5,因为Tycho试图用不同的限定符来解析category.xml引用的功能。

    如果我正确理解更新站点/ p2存储库,应该可以提供各种各样的工件/包/功能,对吗?

    我怎样才能解决这个问题,或者更确切地说:我是否可以使用一个tycho构建来连续运行上述构建步骤并为所有构建步骤使用相同的限定符?

    附录:这个existing question朝着同一个方向发展,并建议将(特色)Tycho项目安装到......本地Maven存储库" 。这实际上是我在运行1.和2.之后做的事情,彼此之后,为两者指定相同的本地回购。但是然后3.没有从那里拉出引用的工件,因为限定符是不同的(两个不同的反应堆构建)。在同一反应堆构建中运行所有内容对我来说完全没问题,但我认为这是不可能的,因为涉及不同的目标平台。

    我认为那里的解决方案非常接近我的需求,但我不明白我的category.xml(或site.xml)和POM中的额外依赖关系是如何协同工作的。我是否必须完全放弃category.xml并重新指定eclipse-repository POM中的所有依赖项?

    我的构建大致如下:

    foo.releng/pom.xml(父母POM)

    <?xml version="1.0" encoding="UTF-8"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
        <modelVersion>4.0.0</modelVersion>
        <groupId>net.bar</groupId>
        <artifactId>foo</artifactId>
        <version>0.31.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <properties>
            <tycho-version>1.0.0</tycho-version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <jacoco-version>0.7.6.201602180812</jacoco-version>
        </properties>
    
        <modules>
            <module>../foo.plugin1</module>
            <module>../foo.plugin2</module>
            <!-- feature module is built depending on target platform, see below -->
        </modules>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.eclipse.tycho</groupId>
                    <artifactId>tycho-maven-plugin</artifactId>
                    <version>${tycho-version}</version>
                    <extensions>true</extensions>
                </plugin>
                <plugin>
                    <groupId>org.eclipse.tycho</groupId>
                    <artifactId>target-platform-configuration</artifactId>
                    <version>${tycho-version}</version>
                    <configuration>
                        <!-- target and dependency-resolution are RAP/RCP dependent, see profiles below -->
                        <resolver>p2</resolver>
                        <environments>
                            <environment>
                                <os>win32</os>
                                <ws>win32</ws>
                                <arch>x86</arch>
                            </environment>
                            <environment>
                                <os>win32</os>
                                <ws>win32</ws>
                                <arch>x86_64</arch>
                            </environment>
                        </environments>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <profiles>
            <profile>
                <id>target-rcp</id>
                <activation>
                    <property>
                        <name>target.platform</name>
                        <value>rcp</value>
                    </property>
                </activation>
                <modules>
                    <module>../foo.fragment.rcp</module>
                    <module>../foo.feature.rcp</module>
                </modules>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.eclipse.tycho</groupId>
                            <artifactId>target-platform-configuration</artifactId>
                            <version>${tycho-version}</version>
                            <configuration>
                                <target>
                                    <artifact>
                                        <groupId>net.bar</groupId>
                                        <artifactId>net.bar.foo.target.rcp</artifactId>
                                        <version>${project.version}</version>
                                        <classifier>rcp</classifier>
                                    </artifact>
                                </target>
                                <dependency-resolution>
                                    <optionalDependencies>ignore</optionalDependencies>
                                    <extraRequirements>
                                        <requirement>
                                            <type>eclipse-plugin</type>
                                            <id>org.eclipse.ui</id>
                                            <versionRange>0.0.0</versionRange>
                                        </requirement>
    
                                        ... more rcp-only dependencies
    
                                    </extraRequirements>
                                </dependency-resolution>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
            <profile>
                <id>target-rap</id>
                <activation>
                    <property>
                        <name>target.platform</name>
                        <value>rap</value>
                    </property>
                </activation>
                <modules>
                    <module>../foo.fragment.rap</module>
                    <module>../foo.feature.rap</module>
                </modules>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.eclipse.tycho</groupId>
                            <artifactId>target-platform-configuration</artifactId>
                            <version>${tycho-version}</version>
                            <configuration>
    
                            ... same as for RCP above, but for RAP
    
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>
    </project>
    

    这是updatesite/category.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <site>
       <feature url="features/net.bar.foo.feature.rcp_0.31.0.qualifier.jar" id="net.bar.foo.feature.rcp" version="0.31.0.qualifier">
          <category name="net.bar.rcp"/>
       </feature>
       <feature url="features/net.bar.foo.feature.rap_0.31.0.qualifier.jar" id="net.bar.foo.feature.rap" version="0.31.0.qualifier">
          <category name="net.bar.rap"/>
       </feature>
       <category-def name="net.bar.rcp" label="RCP">
          <description>
             RCP Platform Features
          </description>
       </category-def>
       <category-def name="net.bar.rap" label="RAP">
          <description>
             RAP Platform Features
          </description>
       </category-def>
    </site>
    

    updatesite/pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <version>0.31.0-SNAPSHOT</version>
            <relativePath>../foo.releng/pom.xml</relativePath>
            <artifactId>foo</artifactId>
            <groupId>net.bar</groupId>
        </parent>
    
        <artifactId>net.bar.foo.updatesite</artifactId>
        <packaging>eclipse-repository</packaging>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.eclipse.tycho</groupId>
                    <artifactId>tycho-packaging-plugin</artifactId>
                    <version>${tycho-version}</version>
                    <configuration>
                        <archiveSite>true</archiveSite>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

1 个答案:

答案 0 :(得分:1)

This question涉及一个非常类似的问题,这有助于我找到解决方案。

我成功地将tycho-packaging-plugin配置为reproducible timestamp qualifier

通过对所有连续构建使用常量版本限定符(基于git提交ID),最终的存储库构建可以在本地maven存储库中正确解析所有引用的功能包。

在此调整之后,以下构建运行没有任何问题,并发布RAP和RCP功能风格:

# build rcp target

cd foo/net.bar.foo.target.rcp
mvn clean install -Dmaven.repo.local=../../m2

# build rap target

cd ../net.bar.foo.target.rap
mvn clean install -Dmaven.repo.local=../../m2

# build features and plugins for rcp, then for rap

cd ../net.bar.foo.releng
mvn clean install -Dmaven.repo.local=../../m2 -Dtarget.platform=rcp
mvn clean install -Dmaven.repo.local=../../m2 -Dtarget.platform=rap

# build p2 repository 

cd ../net.bar.foo.updatesite
mvn clean install -Dmaven.repo.local=../../m2 -Dtarget.platform=rap

瞧:

Update site with RCP and RAP flavor of same feature