2016-09-16 11 views
1

Мои требованияКак построить POM файл Maven как для 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. Run МВН чистый развернуть для развертывания Java профиль

    Успешно. Maven развернуть следующие файлы в удаленном хранилище:

    • MyLib-1.0.jar
    • MyLib-1.0.pom
    • MyLib-1,0-javadoc.jar
    • MyLib-1,0-sources.jar
    • И все их знаковые файлы
  2. Run МВН чистый 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' 

Вопрос: почему происходит эта ошибка?

ответ

1

Сообщается об same issue и главным образом из-за того, что в главном артефакте используется классификатор (android), а источники и артефакт 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 артефакт не может быть найден (в соответствии с основной артефакт классификатором): а несоответствие.

К счастью, вы можете решить эту проблему при конфигурировании maven-source-plugin через его classifier вариант (по умолчанию для 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} свойство для classifier значения maven-jar-plugin также: то есть, централизовать его значение его обеспечить более легкое обслуживание ,

+0

Спасибо A_Di-Matteo. Я проверю его в следующий понедельник и дам вам знать результат. Я проголосовал за это. – Loc

+0

Не работает. Такая же ошибка. Благодаря! – Loc

+0

@Loc ли источники и javadoc jar генерируются с использованием разных классификаторов? –

 Смежные вопросы

  • Нет связанных вопросов^_^