2016-08-24 16 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> 

私は上記のコードを依存関係のあるjarファイルに作成していますが、私のpomにはスコープ付きの依存関係もありますが、これらの依存関係の範囲を変更することはできません。なぜなら、通常のjarファイルにはそれらを含めないでください。これらはコンテナによって提供されるためです。このようassembly.xmlファイルを追加スコープ付きの依存関係を含むmaven uber jarの作成方法

答えて

2

あなたのpom.xmlでこれが必要になります。提供された依存関係を追加したい場合は、その上に構築して<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> 

これは通常(SO compileruntimeの範囲を有する)、実行時に必要なすべての依存関係とprovided範囲を有する全ての依存関係が含まれます。

あなたはこの記述フォーマットの使用を設定します:path/to/assembly.xmlはPOMの位置に対する上記の記述形式、パスに対応

<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> 

+0

おかげさまでTunaki !! – Praneeth

0

試してください:あなたは、各スコープのために必要なあらゆるdependencySetを追加

<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> 

また、事前に定義されたjar-with-dependencies記述子が生成JARのルートに、実行時に必要なすべての依存関係をアンパック

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

これにはテストスコープの依存関係が含まれますが、これは望ましくありません。 – Tunaki

+0

ええ、あなたはどのスコープを含めたかったのかは言わなかったので、必要な範囲に "test"を変更するだけです。 – Gandalf

+0

@Tunakiあなたの受け入れられた答えはまったく同じものです。 – Gandalf

0

また、私は

親ポンポンで
<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> 

assembly.xml 以下のようないくつかのことをした、配布ファイルの作成に取り組んでいました.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> 
関連する問題