在2017年从Maven工件生成P2存储库
幾年前,我寫了一篇博客文章,介紹如何基于Maven工件生成P2存儲庫。 如今,這種描述的方法已經過時了,我想展示一種基于p2-maven-plugin的新方法,該方法是為解決該問題而創建的。
Maven構建生命周期中的P2-Maven-Plugin集成
首先,我們將p2-maven-plugin的目標站點綁定到Maven的生命周期階段包 。 該目標負責生成P2存儲庫。
<plugin><groupId>org.reficio</groupId><artifactId>p2-maven-plugin</artifactId><version>1.3.0</version><executions><execution><id>default-cli</id><phase>package</phase><goals><goal>site</goal></goals><!--... --></execution></executions> </plugin>生成P2存儲庫
現在,我們可以定義哪些Maven工件應該成為新P2存儲庫的一部分。 如果已定義的工件已經有OSGi清單,則與p2-maven插入無關。 如果不存在OSGi清單,則該插件將生成一個清單。
<execution> <!-- ... --> <configuration><artifacts><!-- specify your dependencies here --><!-- groupId:artifactId:version --><artifact><id>com.google.guava:guava:jar:23.0</id><!-- Artifact with existing OSGi-Manifest--></artifact><artifact><id>commons-io:commons-io:1.3</id><!-- Artifact without existing OSGi-Manifest--></artifact></artifacts> </configuration> </execution>工件由模式groupId:artifactId:version指定 。 如果你想節省一些打字,請使用Buildr標簽MVN庫網站對復制權依賴性聲明的格式。
此樣本配置創建一個P2存儲庫,其外觀類似于以下內容:
target/repository ├── artifacts.jar ├── category.xml ├── content.jar └── plugins├── com.google.code.findbugs.jsr305_1.3.9.jar├── com.google.errorprone.error_prone_annotations_2.0.18.jar├── com.google.guava_23.0.0.jar├── com.google.j2objc.annotations_1.1.0.jar├── commons-io_1.3.0.jar└── org.codehaus.mojo.animal-sniffer-annotations_1.14.0.jar1 directory, 9 files插件的默認行為是,還將下載已定義工件的所有傳遞依賴項,并將其打包到P2存儲庫中。 如果您不想要它,則必須在相應的工件聲明中將選項transitive設置為false 。 如果需要P2存儲庫中已定義工件的源(如果它們存在于Maven存儲庫中),則必須在對應的工件聲明中將選項源設置為true 。
<!-- ... --> <artifact><id>com.google.guava:guava:jar:23.0</id><transitive>false</transitive><source>true</source> </artifact> <!-- ... -->然后,生成的P2存儲庫如下所示:
target/repository ├── artifacts.jar ├── category.xml ├── content.jar └── plugins├── com.google.guava.source_23.0.0.jar├── com.google.guava_23.0.0.jar└── commons-io_1.3.0.jar1 directory, 6 files使用分組工件生成P2存儲庫
在某些情況下,您希望將工件歸為所謂的feature 。 p2-maven-plugin提供了一個選項,可以將Maven工件直接分組為功能。 工件的定義與上面相同。 不同之處在于它必須在對應的功能內。 然后,要素定義需要一些元數據信息,例如要素ID,要素版本,描述等。
<!-- ...--> <configuration><featureDefinitions><feature><!-- Generate a feature including artifacts that are listed below inside the feature element--><id>spring.feature</id><version>4.3.11</version><label>Spring Framework 4.3.11 Feature</label><providerName>A provider</providerName><description>${project.description}</description><copyright>A copyright</copyright><license>A licence</license><artifacts><artifact><id>org.springframework:spring-core:jar:4.3.11.RELEASE</id>id></artifact><artifact><id>org.springframework:spring-context:jar:4.3.11.RELEASE</id>id><source>true</source></artifact></artifacts></feature><!--...--></featureDefinitions><!-- ... --> <configuration>然后,生成的P2存儲庫如下所示:
target/repository ├── artifacts.jar ├── category.xml ├── content.jar ├── features │ └── spring.feature_4.3.11.jar └── plugins├── org.apache.commons.logging_1.2.0.jar├── org.springframework.spring-aop.source_4.3.11.RELEASE.jar├── org.springframework.spring-aop_4.3.11.RELEASE.jar├── org.springframework.spring-beans.source_4.3.11.RELEASE.jar├── org.springframework.spring-beans_4.3.11.RELEASE.jar├── org.springframework.spring-context.source_4.3.11.RELEASE.jar├── org.springframework.spring-context_4.3.11.RELEASE.jar├── org.springframework.spring-core_4.3.11.RELEASE.jar├── org.springframework.spring-expression.source_4.3.11.RELEASE.jar└── org.springframework.spring-expression_4.3.11.RELEASE.jar2 directories, 14 files當然,這兩種選擇(使用功能生成p2存儲庫,并且僅使用插件生成)可以混合使用。
p2-maven-plugin提供了更多選項,例如排除特定的傳遞依賴項,引用其他Eclipse功能等。 有關更多信息,請查看p2-maven-plugin主頁。
現在,我們可以從Maven工件生成P2存儲庫。 我們缺少如何將此P2存儲庫部署到Artifactory或Sonatype Nexus等存儲庫管理器的方法。 兩種存儲庫管理器都支持P2存儲庫,Professional版本中的Artifactory(需要付費)和OSS版本中的Sonatype Nexus(免費)。 對于Nexus,重要的是使用2.x版本。 最新版本3.x尚不支持P2存儲庫。
將P2存儲庫部署到存儲庫管理器
首先,我們希望將生成的P2存儲庫打包到一個zip文件中。 因此,我們將tycho-p2-repository-plugin添加到Maven構建生命周期:
<plugin><groupId>org.eclipse.tycho</groupId><artifactId>tycho-p2-repository-plugin</artifactId><version>1.0.0</version><executions><execution><phase>package</phase><goals><goal>archive-repository</goal></goals></execution></executions> </plugin>然后,我們必須標記該zip文件,以便Maven認識到它必須在部署階段將其部署到存儲庫管理器。 為此,我們將build-helper-maven-plugin添加到Maven構建生命周期。
<!-- Attach zipped P2 repository to be installed and deployed in the Maven repository during the deploy phase. --> <plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId><version>3.0.0</version><executions><execution><goals><goal>attach-artifact</goal></goals><configuration><artifacts><artifact><file>target/${project.artifactId}-${project.version}.zip</file><type>zip</type></artifact></artifacts></configuration></execution></executions> </plugin>現在,生成的P2存儲庫可以由其他項目處理。 有關如何處理P2存儲庫的更多信息,請查看存儲庫管理器的文檔。
可以在Github上找到整個pom.xml示例。
鏈接
- 2013年的舊博客文章
- P2 Maven插件
- Github上示例的完整源代碼
翻譯自: https://www.javacodegeeks.com/2017/09/generate-p2-repository-maven-artifacts-2017.html
總結
以上是生活随笔為你收集整理的在2017年从Maven工件生成P2存储库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你手机变电脑形式并带有开机声音如何手机
- 下一篇: 电脑数据丢失如何恢复电脑文件丢失如何找回