[英]How to build a Maven POM file for both Android and Java releases
我的要求
我有一個 Java 實用程序庫。 我想制作 2 個 jar 文件。 一個用於 Android,另一個用於 Java。
對於 Android jar,我想排除 JDBC 包。
我想將 jar 文件和他們的 javadoc、javasources 上傳到 Maven 遠程存儲庫中。
所以我可以使用下面的庫
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>mylib</artifactId>
<version>1.0</version>
</dependency>
或 Android 分類器
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>mylib</artifactId>
<version>1.0</version>
<classifier>android</classifier>
</dependency>
這是我的 POM.xml
<project>
<!-- .... -->
<groupId>com.mycompany</groupId>
<artifactId>mylib</artifactId>
<version>1.0</version>
<name>mylib</name>
<packaging>jar</packaging>
<!-- .... -->
<build>
<plugins>
<!-- compiler -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- .... -->
</plugin>
<!-- jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<!-- .... -->
</plugin>
<!-- source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<!-- .... -->
</plugin>
<!-- javadoc -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<!-- .... -->
</plugin>
<!-- nexus-staging-maven -->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<!-- .... -->
</plugin>
<!-- maven-gpg -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<!-- .... -->
</plugin>
</plugins>
</build>
<profiles>
<!-- All files - Java -->
<profile>
<id>java</id>
<activation>
<property>
<name>!android</name>
</property>
</activation>
</profile>
<!-- Android - Excluding JDBC, JPA packages -->
<profile>
<id>android</id>
<activation>
<property>
<name>android</name>
</property>
</activation>
<build>
<plugins>
<!-- Exclude some packages -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/jdbc/**</exclude>
</excludes>
</configuration>
</plugin>
<!-- Exclude some packages -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>android</classifier>
<excludes>
<exclude>**/jdbc/**</exclude>
</excludes>
</configuration>
</plugin>
<!-- Exclude some packages -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/jdbc/**</exclude>
</excludes>
</configuration>
</plugin>
<!-- Exclude some packages -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<sourcepath>${project.basedir}/src/main/java</sourcepath>
<sourceFileExcludes>
<sourceFileExclude>**/jdbc/**</sourceFileExclude>
</sourceFileExcludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<!-- .... -->
</dependencies>
</project>
命令行工具
運行mvn clean deploy以部署 Java 配置文件
成功。 Maven 將以下文件部署到遠程存儲庫中:
運行mvn clean deploy -Dandroid以部署 Android 配置文件
生成以下文件:
我有錯誤
[ERROR] Repository "mycompany-1082" failures
[ERROR] Rule "sources-staging" failures
[ERROR] * Missing: no main jar artifact found in folder '/com/mycompany/mylib/1.0'
[ERROR] Rule "javadoc-staging" failures
[ERROR] * Missing: no main jar artifact found in folder '/com/mycompany/mylib/1.0'
問題:為什么會發生此錯誤?
已經報告了相同的問題,這主要是由於主要工件使用分類器( android
分類器)而源和 javadoc 工件不使用這一事實,從而造成錯位。
事實上,錯誤消息正是指向源代碼和 javadoc 工件的問題:
[ERROR] Rule "sources-staging" failures
[ERROR] * Missing: no main jar artifact found in folder '/com/mycompany/mylib/1.0'
[ERROR] Rule "javadoc-staging" failures
[ERROR] * Missing: no main jar artifact found in folder '/com/mycompany/mylib/1.0'
說找不到sources
和javadoc
工件(根據主要工件分類器):不匹配。
幸運的是,您可以通過其classifier
選項(默認為sources
)配置maven-source-plugin
和通過其classifier
選項(默認為javadoc
)配置maven-javadoc-plugin
來解決此問題。
android
配置文件實際上可以簡單地指定以下property
條目:
<properties>
<maven.source.classifier>android-sources</maven.source.classifier>
<maven.javadoc.classifier>android-javadoc</maven.javadoc.classifier>
</properties>
確實使用上述插件目標為這些選項指定的用戶屬性。
為了使其更加健壯,最好采用以下方法:
<properties>
<android.classifier>android</android.classifier>
<maven.source.classifier>${android.classifier}-sources</maven.source.classifier>
<maven.javadoc.classifier>${android.classifier}-javadoc</maven.javadoc.classifier>
</properties>
然后使用${android.classifier}
屬性作為maven-jar-plugin
的classifier
值:也就是說,集中它的值可以確保更容易維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.