maven 生成本地库_在2017年从Maven工件生成P2存储库
maven 生成本地庫(kù)
幾年前,我寫(xiě)了一篇博客文章,介紹如何基于Maven工件生成P2存儲(chǔ)庫(kù)。 如今,這種描述的方法已經(jīng)過(guò)時(shí)了,我想展示一種基于p2-maven-plugin的新方法,該方法是為解決此問(wèn)題而創(chuàng)建的。
Maven構(gòu)建生命周期中的P2-Maven-Plugin集成
首先,我們將p2-maven-plugin的目標(biāo)站點(diǎn)綁定到Maven的生命周期階段包 。 該目標(biāo)負(fù)責(zé)生成P2存儲(chǔ)庫(kù)。
<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存儲(chǔ)庫(kù)
現(xiàn)在,我們可以定義哪些Maven工件應(yīng)成為新P2存儲(chǔ)庫(kù)的一部分。 如果定義的工件已經(jīng)有OSGi清單,則與p2-maven插入無(wú)關(guān)。 如果不存在OSGi清單,則該插件將生成一個(gè)清單。
<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指定 。 如果要保存一些鍵入內(nèi)容,請(qǐng)使用MVN存儲(chǔ)庫(kù)網(wǎng)站上的Buildr選項(xiàng)卡復(fù)制正確的依賴項(xiàng)聲明格式。
此樣本配置創(chuàng)建了一個(gè)P2存儲(chǔ)庫(kù),該存儲(chǔ)庫(kù)如下所示:
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該插件的默認(rèn)行為是,還將下載已定義工件的所有傳遞依賴項(xiàng),并將其打包到P2存儲(chǔ)庫(kù)中。 如果您不想要它,則必須在相應(yīng)的工件聲明中將選項(xiàng)transitive設(shè)置為false 。 如果需要P2存儲(chǔ)庫(kù)中已定義工件的源(如果它們?cè)贛aven存儲(chǔ)庫(kù)中存在),則必須在對(duì)應(yīng)的工件聲明中將選項(xiàng)源設(shè)置為true 。
<!-- ... --> <artifact><id>com.google.guava:guava:jar:23.0</id><transitive>false</transitive><source>true</source> </artifact> <!-- ... -->然后生成的P2存儲(chǔ)庫(kù)如下所示:
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存儲(chǔ)庫(kù)
在某些情況下,您希望將工件歸為所謂的feature 。 p2-maven-plugin提供了一個(gè)選項(xiàng),可以將Maven工件直接分組為功能。 工件的定義與上面相同。 不同之處在于它必須在對(duì)應(yīng)的功能內(nèi)。 然后,要素定義需要一些元數(shù)據(jù)信息,例如要素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存儲(chǔ)庫(kù)如下所示:
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當(dāng)然,這兩種選擇(使用功能生成p2存儲(chǔ)庫(kù),并且僅使用插件生成)可以混合使用。
p2-maven-plugin提供了更多選項(xiàng),例如排除特定的傳遞依賴項(xiàng),引用其他Eclipse功能等。 有關(guān)更多信息,請(qǐng)查看p2-maven-plugin主頁(yè)。
現(xiàn)在,我們可以從Maven工件生成P2存儲(chǔ)庫(kù)。 我們?nèi)鄙偃绾螌⒋薖2存儲(chǔ)庫(kù)部署到Artifactory或Sonatype Nexus等存儲(chǔ)庫(kù)管理器的方法。 兩種存儲(chǔ)庫(kù)管理器都支持P2存儲(chǔ)庫(kù),Professional版本中的Artifactory(需要付費(fèi))和OSS版本中的Sonatype Nexus(免費(fèi))。 對(duì)于Nexus,使用2.x版非常重要。 最新版本3.x尚不支持P2存儲(chǔ)庫(kù)。
將P2存儲(chǔ)庫(kù)部署到存儲(chǔ)庫(kù)管理器
首先,我們希望將生成的P2存儲(chǔ)庫(kù)打包到一個(gè)zip文件中。 因此,我們將tycho-p2-repository-plugin添加到Maven構(gòu)建生命周期:
<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>然后,我們必須標(biāo)記該zip文件,以便Maven認(rèn)識(shí)到它必須在部署階段將其部署到存儲(chǔ)庫(kù)管理器。 為此,我們將build-helper-maven-plugin添加到Maven構(gòu)建生命周期。
<!-- 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>現(xiàn)在,生成的P2存儲(chǔ)庫(kù)可以由其他項(xiàng)目處理。 有關(guān)如何處理P2存儲(chǔ)庫(kù)的更多信息,請(qǐng)查看存儲(chǔ)庫(kù)管理器的文檔。
可以在Github上找到整個(gè)pom.xml示例。
鏈接
- 2013年的舊博客文章
- P2 Maven插件
- Github上示例的完整源代碼
翻譯自: https://www.javacodegeeks.com/2017/09/generate-p2-repository-maven-artifacts-2017.html
maven 生成本地庫(kù)
總結(jié)
以上是生活随笔為你收集整理的maven 生成本地库_在2017年从Maven工件生成P2存储库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 乘联会:8 月乘用车市场产品竞争力指数降
- 下一篇: 腾讯音乐手游《节奏大师》定档 11 月