java - 如何使用p2-maven-plugin高效管理第三方依赖?

标签 java eclipse maven dependencies eclipse-rcp

为了管理 Eclipse RCP 应用程序(使用 Tycho 构建)中的第三方依赖项,我使用 p2-maven-plugin 和 Jetty 将 Maven 中心 Artifact 转换为 bundle ,并使它们在我的 Target 定义文件中作为 P2 存储库使用。我的设置和工作流程如下:

  • 在 p2-maven-plugin 的 Artifact 部分添加依赖项。
  • 运行目标 p2:site 来重建整个站点。
  • 运行 jetty 。
  • 重新加载目标。
  • 现在我的依赖项可在 list 文件的依赖项部分中找到。

所以我有 3 个问题:

  • 每次我想要添加新的依赖项时,我都必须重建站点并重新启动 Jetty,有没有办法通过添加 pom 中引用的新依赖项来更新存储库?
  • 以下设置是否适合拥有多个项目的公司:
    • 为每个项目创建一个(特定第三方)远程 P2 存储库,并相应配置项目的目标定义。
    • 当团队成员需要第三方库时,他可以使用 p2-maven-plugin 生成 bundle ,将其推送到远程存储库并清理 pom 的 Artifact 部分。

总而言之,您如何管理团队中的第三方依赖项?

最佳答案

  • 问题是,当您构建 p2 站点时,还将生成包含捆绑信息的“context.xml”和“artifact.xml”元数据。 p2 解析器使用这些元数据来解析包。所以我认为如果不重建网站,更新你的 p2 存储库将是一个困难的方法。

    我的建议:自从您在团队中工作以来,最清晰的方法是为所有第三方依赖项拥有一个独立的存储库(nexus、jetty、tomcat...)(您可以使用 category.xml )。

    部署重新创建的p2并不是什么大问题,您可以在创建站点的同一个pom中使用wagon-maven-plugin并将其绑定(bind)到部署阶段,因此使用mvn clean deploy您可以创建并部署存储库

示例:

<build>
<plugins>
    <plugin>
        <groupId>org.reficio</groupId>
        <artifactId>p2-maven-plugin</artifactId>
        <version>1.2.0-SNAPSHOT</version>
        <executions>
            <execution>
                <id>default-cli</id>
                <configuration>
                    <artifacts>
                        <!-- specify your depencies here -->
                        <!-- groupId:artifactId:version -->
                        <artifact><id>commons-io:commons-io:2.1</id></artifact>
                        <artifact><id>commons-lang:commons-lang:2.4</id></artifact>
                        <artifact><id>commons-lang:commons-lang:2.5</id></artifact>
                        <artifact><id>commons-lang:commons-lang:2.6</id></artifact>
                        <artifact><id>org.apache.commons:commons-lang3:3.1</id></artifact>
                    </artifacts>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>wagon-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
            <execution>
                <id>upload-repo</id>
                <phase>deploy</phase>
                <goals>
                    <goal>upload</goal>
                </goals>
                <configuration>
                    <fromDir>${project.build.directory}/repository/</fromDir>
                    <includes>*/**</includes>
                    <serverId>my-p2-repository</serverId>
                    <url>dav:http://mycompany.com/../content/repositories</url>
                    <toDir>thirdparty-p2-repository</toDir>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
<extensions>
    <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-webdav-jackrabbit</artifactId>
        <version>1.0-beta-7</version>
    </extension>
</extensions>

<distributionManagement>
        <repository>
            <id>my-p2-repository</id>
            <url>dav:http://mycompany.com/../content/repositories</url>
        </repository>
</distributionManagement>

注意:pom 的 distributionManagement 部分中的 URL ID 需要与 settings.xml 文件中的服务器部分的 ID 匹配。

在settings.xml中添加服务器:

<server>
 <id>my-p2-repository</id>
 <username>...</username>
 <password>...</password>
</server>

希望这有帮助。

关于java - 如何使用p2-maven-plugin高效管理第三方依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37165662/

相关文章:

java - 二叉搜索树中序迭代器的 next 方法

java - JFrame : cannot display two panels in jframe

eclipse - EGit 与 Eclipse,这是什么意思?

java - Android ListView 未在滚动时重新绘制

java - 消息: ORA-04079: invalid trigger specification in eclipse

java - 在空引用上创建方法引用不会引发异常

maven - 如何通过存储库共享一个通用的 build.gradle?

java - maven打包的jar如何修改权限?我正在使用 maven 程序集插件

java - 当 Maven 中显示以下 Artifact 无法解析(尽管它们位于 Maven 缓存中)时,这是什么意思?

java - 如何使用 JFrames 设置 "current"窗口?