2015-11-20 167 views
0

我想使用maven-shade-plugin創建一個沒有第三方依賴關係的JAR文件。但是,第三方依賴jar應該被複制到某個文件夾(比如libs)。 因此,當我分發我的應用程序時,我將main.jar和libs文件夾分散在一起,因此當啓動創建的主jar時,它應該從libs文件夾加載依賴關係。Maven Shade插件創建無依賴關係的JAR並從其他位置加載依賴關係JAR

是否有可能在maven-shade-plugin中做到這一點?那麼如何配置呢?

+0

簡單回答號碼 – khmarbaise

回答

0

這是不能實現的,因爲Maven shade插件將所有依賴jar文件內容(類文件)提取到主jar文件中。但是,這可以使用maven-jar-pluginmaven-dependency-plugin來實現。這是我的生成設置:

<build> 
<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
       <manifest> 
        <addClasspath>true</addClasspath> 
        <classpathPrefix>lib/</classpathPrefix> 
        <mainClass>fully.qualified.MainClass</mainClass> 
       </manifest> 
      </archive> 
     </configuration> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>${project.build.directory}/lib</outputDirectory> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

0

當然,我也直接內置了一個大罐子基於Maven插件蔭。

這是我使用在一個罐子裏建立一個Spring應用程序在內的所有Spring框架的依賴:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.3</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
         <resource>META-INF/spring.handlers</resource> 
        </transformer> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
         <resource>META-INF/spring.schemas</resource> 
        </transformer> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
         <resource>META-INF/spring.tooling</resource> 
        </transformer> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <manifestEntries> 
          <Main-Class>${project.build.mainClass}</Main-Class> 
          <Build-Number>1</Build-Number> 
          <Specification-Title>${project.artifactId}</Specification-Title> 
          <Specification-Version>${project.version}</Specification-Version> 
          <Implementation-Title>${project.artifactId}</Implementation-Title> 
          <Implementation-Version>${project.version}</Implementation-Version> 
          <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id> 
         </manifestEntries> 
        </transformer> 
       </transformers> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

除了有關與Maven Assembly Plugin的比較,如HP所提到的,Maven的大會插件只提供一些基本的支持,但Maven Shade Plugin可以提供更多控制。