簡體   English   中英

如何為 Android 和 Java 版本構建 Maven POM 文件

[英]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>

命令行工具

  1. 運行mvn clean deploy以部署 Java 配置文件

    成功 Maven 將以下文件部署到遠程存儲庫中:

    • mylib-1.0.jar
    • mylib-1.0.pom
    • mylib-1.0-javadoc.jar
    • mylib-1.0-sources.jar
    • 以及他們所有的簽名文件
  2. 運行mvn clean deploy -Dandroid以部署 Android 配置文件

    生成以下文件:

    • mylib-1.0-android.jar // 附加分類器
    • mylib-1.0.pom
    • mylib-1.0-javadoc.jar
    • mylib-1.0-sources.jar
    • 以及他們所有的簽名文件

我有錯誤

    [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'

說找不到sourcesjavadoc工件(根據主要工件分類器):不匹配。

幸運的是,您可以通過其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-pluginclassifier值:也就是說,集中它的值可以確保更容易維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM