2014-08-28 105 views
2

我正在使用下面的插件来生成可执行jar.I在我的类路径中有一个属性文件,我想添加到我的jar,但使用程序集插件我我无法做到这一点。我找到了一些答案,说我们可以使用jar插件创建一个jar,然后使用assembly插件打包它们。任何人都可以帮助我如何做到这一点。如何添加classpath属性到使用maven程序集的可执行jar

我的插件描述

<plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>mainclass</mainClass> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
        </manifest> 
       </archive> 
       <includes> 
       <include>myconfig.propeties</include> 
       </includes> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <appendAssemblyId>false</appendAssemblyId> 
       <finalName>app</finalName> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass> 
          mainclass 
         </mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef> 
         jar-with-dependencies 
        </descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

我的罐子与 - dependeinceis文件

<?xml version="1.0" encoding="UTF-8"?> 
<assembly> 
<id>bin</id> 
<!-- Generates a zip package containing the needed files --> 
<formats> 
<format>zip</format> 
</formats> 

<!-- Adds dependencies to zip package under lib directory --> 
<dependencySets> 
    <dependencySet> 
     <!-- 
      Project artifact is not copied under library directory since 
      it is added to the root directory of the zip package. 
     --> 
     <useProjectArtifact>false</useProjectArtifact> 
     <outputDirectory>lib</outputDirectory> 
     <unpack>false</unpack> 
    </dependencySet> 
</dependencySets> 

<fileSets> 
    <!-- 
     Adds startup scripts to the root directory of zip package. The startup 
     scripts are located to src/main/scripts directory as stated by Maven 
     conventions. 
    --> 
    <fileSet> 
     <directory>${project.build.scriptSourceDirectory}</directory> 
     <outputDirectory></outputDirectory> 
     <includes> 
      <include>startup.*</include> 
     </includes> 
    </fileSet> 
    <!-- adds jar package to the root directory of zip package --> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
     <outputDirectory></outputDirectory> 
     <includes> 
      <include>*.jar</include> 
     </includes> 
    </fileSet> 
</fileSets> 

在此先感谢。

+0

当您执行全新安装时,目标文件夹是否包含您打算包含在JAR中的属性文件? – ppuskar 2014-08-28 04:55:40

+0

是的,它包含文件,但它不包含在jar中 – 2014-08-28 05:27:01

回答

2

我通常会发现使用阴影插件更容易。它捆绑了运行jar到一个JAR所需的所有依存关系,所以你不必与类路径鼓捣,一切都只是在罐子:

http://maven.apache.org/plugins/maven-shade-plugin/

用法示例:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <minimizeJar>true</minimizeJar> 
       <transformers> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <mainClass>your.package.Main</mainClass> 
        </transformer> 
       </transformers> 
       <artifactSet> 
        <excludes> 
         <!-- maybe there is stuff you don't want in the jar --> 
         <exclude>log4j:log4j</exclude> 
         <exclude>org.slf4j:slf4j-api</exclude> 
         <exclude>org.slf4j:slf4j-log4j12</exclude> 
        </excludes> 
       </artifactSet> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
相关问题