2015-01-29 3 views
5

Я хочу построить проект так, чтобы конечная банка включала все зависимости в одном файле jar (если не возможно включает классы из зависимостей в файл jar) i следовал за потоком Including dependencies in a jar with Maven, но lt включил зависимости, которые я даже не упоминал в моем пом. Вот мой POM, который имеет только две зависимости.Maven jar с зависимостями?

Я хочу, чтобы, когда, когда окончательный будет построен, он включает его конкретные зависимости, упомянутые в ПОМ (либо в классах или форме фляги)

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>3.8.1</version> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>com.myProject</groupId> 
    <artifactId>utils</artifactId> 
    <version>1</version> 
</dependency> 
+0

взглянуть на The Maven плагин оттенок https://maven.apache.org/plugins/maven-shade-plugin/ – SubOptimal

+0

другая зависимость, которые вы видите, вероятно, зависимости от ваших зависимостей ... дона Вы хотите включить их? – jamp

+0

Да, я не хочу их включать – user3198603

ответ

4

Здесь вы найдете пример pom.xml, как ее решить с maven-shade-plugin

Когда вы запустите mvn package, он создает файл Jar target/app-with-dependencies.jar. Этот Jar-файл включает скомпилированные классы самого проекта и только зависимости org.slf4j:slf4j-log4j12 и com.myProject:utils. Он не включает зависимости, от которых зависит org.slf4j:slf4j-log4j12.

<?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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>sub.optimal</groupId> 
    <artifactId>shadedemo</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.7</maven.compiler.source> 
     <maven.compiler.target>1.7</maven.compiler.target> 
     <maven.shade.version>2.3</maven.shade.version> 
     <maven.antrun.version>1.7</maven.antrun.version> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.7.7</version> 
     </dependency> 
     <dependency> 
      <groupId>com.myProject</groupId> 
      <artifactId>utils</artifactId> 
      <version>1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>${maven.shade.version}</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>${maven.shade.version}</version> 
       <configuration> 
        <quiet>true</quiet> 
        <verbose>false</verbose> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <finalName>app-with-dependencies</finalName> 
          <artifactSet> 
           <includes> 
            <!-- 
            here you define the dependencies which 
            you want to be included 
            --> 
            <include>org.slf4j:slf4j-log4j12:*</include> 
            <include>com.myProject:utils:*</include> 
           </includes> 
          </artifactSet> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>${maven.antrun.version}</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <tasks> 
           <delete> 
            <fileset dir="${project.build.directory}" includes="${project.name}-*.jar" /> 
           </delete> 
          </tasks> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

Большое спасибо. Еще одна вещь: я хочу исключить конкретный файл свойств (MyProject.properties) из последней банки. Я попробовал элемент puuting MyProject.properties \t ниже в вашем примере, но все же MyProject.properties включен в финальную банку. Любая идея почему? – user3198603

+0

У меня есть ответ от http://stackoverflow.com/questions/17658831/how-can-i-exclude-dsa-and-sf-files-from-shaded-jar. Еще раз спасибо. – user3198603

+0

один вопрос на ваше решение. Он создает два файла jar, i) a) shadedemo-1.0-SNAPSHOT, а второй - зависимости от приложения. Мне просто нужно одно приложение с зависимыми приложениями .. Есть ли способ, чтобы я мог получить выходной файл как один файл jar вместо двух? – user3198603

3

Один из способов заключается в использовании Maven сборки плагин, ПОМ .xml конфигурация как:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.taobao.top.appstore.App</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
</plugin> 
+0

Это решение, предложенное http://stackoverflow.com/questions/1729054/including-dependencies-in-a-jar-with-maven. Но, как я уже сказал, он также включает все зависимости, которые я даже не упоминал в pom. – user3198603

+0

Когда вы импортируете зависимость, это может зависеть от других банок. Обратите внимание, что Maven Dependency Mechanism является функцией импорта для maven,: http: // www .mkyong.com/maven/how-to-use-maven-dependency-to-download-library-автоматически/ – StackBox

+0

Но по какой-то причине я хочу включить зависимости, упомянутые только в моем пом. Есть ли способ сделать это ? – user3198603

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