2016-05-16 5 views
1

У меня есть довольно большой проект java maven с более чем 200 модулями, это нормально, как есть. Я пытаюсь объединить все эти модули в одну банку.Как создать единую библиотеку jar из проекта maven с несколькими подмодулями?

В некоторых случаях было бы очень удобно объявить только одну новую зависимость от maven, например. my-library-5.2.4-SNAPSHOT-bundle.jar или что-то подобное в новых проектах.

Я попытался использовать сборку maven. Я могу создать новый файл jar, jar содержит все модули jars, и он правильно подходит к локальной .m2-папке, если я его установлю. Jar может быть заявлен как зависимость в других проектах.

Но проблема в том, что я не могу импортировать ни один из этих модулей внутри библиотеки в своих классах Java. Импорт не распознает их.

Я добавил этот раздел сборки моей корневой pom.xml:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>make-bundle</id> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <phase>package</phase> 
        <configuration> 
         <descriptors> 
          <descriptor>assembly.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

И мой assembly.xml выглядит следующим образом:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>bundle</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <moduleSets> 
     <moduleSet> 
      <useAllReactorProjects>true</useAllReactorProjects> 
      <binaries> 
       <outputDirectory>modules</outputDirectory> 
       <unpack>false</unpack> 
      </binaries> 
     </moduleSet> 
    </moduleSets> 
</assembly> 
+0

http://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/ –

ответ

0

Maven практики:

Родительские модули где вы определяете зависимости и плагины, используемые совместно всеми дочерними модулями. Он не должен иметь собственный результат.

Вы должны использовать подмодуль «распределение», который объединяет все ваши другие артефакты модуля, а не пытается сделать это в родительском модуле.

Например -

Создание проекта файла простого родителя POM (с упаковкой «П») в общем для всех проектов

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>my.library</groupId> 
    <artifactId>my-library-parent</artifactId> 
    <version>1.0.0</version> 
    <packaging>pom</packaging> 

    <distributionManagement> 
     <repository> 
      <id>site</id> 
      <url>http://url_id</url> 
     </repository> 
    </distributionManagement> 

</project> 

Теперь для всех проектов, которые вы хотите использовать его, просто включить этот раздел:

<parent> 
    <groupId>my.library</groupId> 
    <artifactId>my-library-parent</artifactId> 
    <version>1.0.0</version> 
</parent> 

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

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