2013-10-08 38 views
3

我可能需要这样的问题与使用maven的依赖,而不拆包罐子,但可执行的JAR文件包括类路径

Maven build assembly with dependencies

maven assembly create jar with dependency and class path

如何执行可执行的JAR?在命令行

Java的罐子给我 异常在线程“主要” java.lang.NoClassDefFoundError:组织/阿帕奇/ log4j的/记录器

我已经executable.jar我的目标目录和lib目录下的所有创造依赖关系jar下的/ lib直接。

这是我的pom.xml的片段。我应该改变什么?

</dependencies> 
<dependency> 
<groupId><gId></groupId> 
<artifactId><aId></artifactId> 
<version><v></version> 
</dependency> 
<dependency> 
<groupId>gI2</groupId> 
<artifactId>aI2</artifactId> 
<version>v</version> 
</dependency> 
</dependencies> 
<build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>com.proj.app</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

回答

0

您的发行版需要包含您在应用程序中使用的库的所有JAR文件。程序集插件专门为满足这一要求而设计。

我通常使用th assembly插件创建一个包含整个分布的ZIP文件。这是我自己的应用程序的JAR文件,所有必需的配置文件,当然还有所有库JAR。

此外,您的可执行JAR文件需要一个适当的清单文件。也就是说,它需要一个正确的主类入口和一个类路径。

1

使用Maven的阴影插件

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.6</version> 
    <configuration> 
     <createDependencyReducedPom>true</createDependencyReducedPom> 
     <filters> 
      <filter> 
       <artifact>*:*</artifact> 
       <excludes> 
        <exclude>META-INF/*.SF</exclude> 
        <exclude>META-INF/*.DSA</exclude> 
        <exclude>META-INF/*.RSA</exclude> 
       </excludes> 
      </filter> 
     </filters> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <mainClass><Your main class here></mainClass> 
        </transformer> 
       </transformers> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

这将包括在一个罐子所有的依赖关系,并自动将主类添加到您的清单文件。

确保您运行“包”目标。

0

你可以用App Assembler插件来做到这一点。它会将依赖项复制到一个文件夹并创建快捷方式来执行主类。

相关问题