2016-09-16 32 views
1

我的要求如何建立一個Maven POM文件針對Android和Java兩個版本

我有一個Java ulitities庫。我想製作2個jar文件。一個用於Android和其他的Java。

對於Android的罐子,我要排除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清潔部署用於部署Java輪廓

    成功。行家部署以下文件到遠程存儲庫:

    • MYLIB-1.0.jar
    • MYLIB-1.0.pom
    • MYLIB-1.0-javadoc.jar
    • MYLIB-1.0-sources.jar
    • 他們所有的符號文件
  2. 運行MVN清潔部署-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' 

問題:爲什麼這個錯誤發生?

回答

1

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選項(默認爲javadoc)解決此問題通過配置其classifier選項(默認爲sources)的maven-source-pluginmaven-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價值:那就是,集中其值可以確保一個更簡單的維護。

+0

謝謝A_Di-Matteo。我會在下週一測試它,並讓你知道結果。我投了票。 – Loc

+0

不工作。同樣的錯誤。謝謝! – Loc

+0

@Loc做了源和javadoc jar得到與不同的分類器? –

相關問題