2016-08-24 9 views
1
<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <archive> 
      <manifest>   
       <mainClass>com.XXXX.XXXXOfflineApp</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    </plugin> 
</plugins> 

У меня есть выше кусок кода, чтобы создать банку с зависимостями, но в моем П я также есть некоторые зависимости с объемом предоставляемыми, но они не включены в uber jar, Ну, я не могу изменить область этих зависимостей, потому что регулярные сборки jars не должны включать их. Поскольку они предоставляются контейнером.Как создать Maven банки убера, который включает в себя зависимости с объемом предоставленного

ответ

2

предопределенная jar-with-dependencies дескриптора распаковывает всю зависимость, необходимую во время выполнения в корень вырабатываемой JAR. Если вы хотите добавить предоставленные зависимости, можно построить на нем и добавить конкретный <dependencySet> с <scope>provided</scope>.

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>jar-with-dependencies</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>provided</scope> 
    </dependencySet> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

Это будет включать в себя все зависимости, как правило, необходимые во время исполнения (так что наличие сферы compile и runtime) и все зависимости, имеющие provided сферу.

Вы бы настроить использование этого формата дескриптора с:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
    <execution> 
     <id>id</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <archive> 
      <manifest> 
      <mainClass>com.XXXX.XXXXOfflineApp</mainClass> 
      </manifest> 
     </archive> 
     <descriptors> 
      <descriptor>path/to/assembly.xml</descriptor> 
     </descriptors> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

где path/to/assembly.xml соответствует пути к вышеупомянутому формату дескриптора, относительно расположения ПОМ.

+0

спасибо Tunaki !! – Praneeth

0

Попробуйте добавить файл assembly.xml так:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>fat-tests</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>test</scope> 
     </dependencySet> 
    </dependencySets> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.directory}/test-classes</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>**/*.class</include> 
      </includes> 
      <useDefaultExcludes>true</useDefaultExcludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Добавление любого dependencySet нужно для каждой области.

Вы также будете нуждаться в этом в вашем pom.xml

<plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <descriptor>src/main/assembly/assembly.xml</descriptor> 
     </configuration> 
+0

Это будет включать зависимые от тестовой области зависимости, которые не нужны. – Tunaki

+0

Да, вы не сказали, какие области вы хотите включить - так, очевидно, просто измените «тест» на любые области (области), которые вам нужны. – Gandalf

+0

@Tunaki ваш принятый ответ точно такой же, как этот бит. – Gandalf

0

Я также работал над созданием дистрибутивный файл, я сделал некоторые вещи, как ниже assembly.xml

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>jar-with-dependencies</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>provided</scope> 
     </dependencySet> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

distribution.xml

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    </assembly> 
    <id>offline-distribution</id> 
    <!-- Specifies that our binary distribution is a zip package --> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <!-- Adds the dependencies of our application to the lib directory --> 
    <dependencySets> 

     <dependencySet> 
      <useProjectArtifact>true</useProjectArtifact> 
      <outputDirectory>/lib</outputDirectory> 
      <unpack>false</unpack> 
     </dependencySet> 
     <dependencySet> 
      <outputDirectory>/lib</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>false</unpack> 
      <scope>provided</scope> 
     </dependencySet> 
     <dependencySet> 
      <outputDirectory>/lib</outputDirectory> 
      <useProjectArtifact>true</useProjectArtifact> 
      <unpack>false</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 

    <fileSets> 

     <fileSet> 
      <directory>${project.basedir}</directory> 
      <outputDirectory>/bin</outputDirectory> 
      <includes> 
       <include>startup*</include> 
      </includes> 
      <useDefaultExcludes>true</useDefaultExcludes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.basedir}</directory> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>README*</include> 
      </includes> 
      <useDefaultExcludes>true</useDefaultExcludes> 
     </fileSet> 
     <fileSet> 
      <directory>${project.basedir}/src/main/resources</directory> 
      <outputDirectory>/config</outputDirectory> 
      <includes> 
       <include>log4j2.xml</include> 
      </includes> 
      <useDefaultExcludes>true</useDefaultExcludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

В родительском ПОМ .xml

<plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <id>id</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <!-- <archive> 
          <manifest> 
           <mainClass>com.XXXX.XXXXOfflineApp</mainClass> 
          </manifest> 
         </archive> --> 
         <descriptors> 
          <descriptor>distribution.xml</descriptor> 
          <descriptor>assembly.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin>