2017-01-05 2 views
0

Существует:Jar от детского П с собственными зависимостями

Родителя П:

<groupId>practice</groupId> 
<artifactId>app</artifactId> 
<packaging>pom</packaging> 
<version>1.0</version> 

<modules> 
    <module>h2db</module> 
</modules> 

<build> 
    <pluginManagement> 
    ... 
    </pluginManagement> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>1.4.185</version> 
    </dependency> 
</dependencies> 

Детского П:

<parent> 
    <artifactId>app</artifactId> 
    <groupId>practice</groupId> 
    <version>1.0</version> 
</parent> 

<artifactId>h2db</artifactId> 
<build> 
    <finalName>h2db</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>h2_server.H2ConsoleServer</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>1.4.185</version> 
    </dependency> 
</dependencies> 

В этом примере этот является родитель ПОМ, который имеет 2 (или больше). У детского помпе есть только одна зависимость, в которой она нуждается. Возможно ли построить ящик из этого модуля pom child и включить (scope: compile) в него одну зависимость? Он создает банку, но не включает h2-зависимость в файле jar. Я попытался использовать maven-assembly-plugin с jar-with-dependencies в дочернем помпе, но в результате он сделал банку со всеми зависимостями от родительского пом.

ответ

1

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

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

Одна из лучших практик, однако, заключается в использовании зависимости управления. Вы можете в родительском pom указать версию любых библиотек log4j и h2, которые будут добавлены дочерним проектом. Затем в вашем дочернем проекте вы просто импортируете зависимость без версии.

Родитель П:

<groupId>practice</groupId> 
<artifactId>app</artifactId> 
<packaging>pom</packaging> 
<version>1.0</version> 

<modules> 
    <module>h2db</module> 
</modules> 

<build> 
    <pluginManagement> 
    ... 
    </pluginManagement> 
</build> 

<dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <version>1.4.185</version> 
    </dependency> 
</dependencies> 
</dependencyManagement> 

Детского П:

<parent> 
    <artifactId>app</artifactId> 
    <groupId>practice</groupId> 
    <version>1.0</version> 
</parent> 

<artifactId>h2db</artifactId> 
<build> 
    <finalName>h2db</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>h2_server.H2ConsoleServer</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
    </dependency> 
</dependencies> 
+0

Спасибо, это действительно хорошо. – IgorZ

0

Off верхней части моей головы, вы можете попробовать maven-shade-plugin (http://maven.apache.org/plugins/maven-shade-plugin/examples/attached-artifact.html)

Не уверен, является ли это именно то, что вам нужно, но это не позволяет указать зависимости включить/игнорировать.

+0

Что делать, если у меня есть 100 зависимостей я должен игнорировать каждый из него вместо того, чтобы в том числе только что мне нужно? – IgorZ

+1

Хм ... Мое знание плагина не на 100%, но я считаю, что вы можете хотя бы использовать подстановочные знаки на пакетах? Кажется, вы также можете создать белый список и, по-видимому, он будет игнорировать остальные? http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html показывает, как настроить включение. Также есть вещь 'minimJar', которая МОЖЕТ выбрасывать неиспользуемые вещи. Ответ на http://stackoverflow.com/questions/8698814/configure-maven-shade-minimizejar-to-include-class-files немного объясняет это. – Pseudos

+0

Спасибо за минимизацию. Я думаю, что смогу сделать это с помощью своих фильтров. – IgorZ

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

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