gpt4 book ai didi

java - 如何为 Android 和 Java 版本构建 Maven POM 文件

转载 作者:行者123 更新时间:2023-11-30 07:08:54 27 4
gpt4 key购买 nike

我的要求

我有一个 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>

Maven CLI

  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'

问题:为什么会发生此错误?

最佳答案

same issue已经有报道,这主要是由于主要工件使用分类器(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 配置 maven-source-plugin 来解决此问题。选项(默认为 sources)和 maven-javadoc-plugin 通过其 classifier选项(默认为 javadoc)。

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 值:也就是说,集中其值(value),确保更轻松的维护。

关于java - 如何为 Android 和 Java 版本构建 Maven POM 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39536410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com