代码之家  ›  专栏  ›  技术社区  ›  cheppsn

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

  •  1
  • cheppsn  · 技术社区  · 7 年前

    我有一个单一来源的RCP/RAP Eclipse特性项目的构建,该项目使用maven概要文件来构建RAP或RCP包、片段和特性。

    这相当有效。如果我将更新站点项目作为模块包含在上述构建的父POM中,我还可以使用“eclipse更新站点”(或“eclipse存储库”)打包轻松构建特定于平台的更新站点。

    然而,我想知道,是否有办法

    1. 构建RCP目标平台>发布到本地回购
    2. 构建RAP目标平台>发布到本地回购
    3. 运行RCP构建(步骤1中的目标平台)>发布到本地回购
    4. 运行RAP构建(步骤2的目标平台)>发布到本地回购
    5. 仅为更新站点运行构建,包括RAP和RCP的功能(不编译任何内容,只是从1+2组装)

    我可以成功地执行步骤1-4,但不能执行步骤5,因为Tycho正在尝试解决类别引用的功能。具有不同限定符的xml。

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

    我该如何解决这个问题,或者更确切地说:我可以有一个tycho构建,它使用相同的限定符连续运行上述构建步骤吗?


    补遗 :此 existing question 与此方向一致,建议“将(功能)Tycho项目安装到…本地Maven存储库”。这实际上就是我在运行1时所做的。和2。之后,为两者指定相同的本地回购。然后是3。无法从那里提取引用的工件,因为限定符不同(两个不同的反应器构建)。在同一个反应堆建造中运行所有东西对我来说都很好,但我认为这是不可能的,因为涉及到不同的目标平台。

    我认为那里的解决方案非常接近我所需要的,但我不明白我的分类是如何的。xml(或site.xml)和POM中的额外依赖项一起工作。我必须放弃类别吗。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 回复  |  直到 7 年前
        1
  •  1
  •   cheppsn    7 年前

    This question 这涉及到一个非常相似的问题,帮助我找到了解决方案。

    我成功地配置了 tycho-packaging-plugin 用一个 reproducible timestamp qualifier .

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

    在此调整之后,以下构建将顺利运行,并发布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