使用maven-dependency-plugin使用maven 3.1创建可运行的jar不会创建可运行的jar

使用Maven 3.1
Eclipse Helios

ASPEKT:

尝试使用maven-jar / dependency-plugins创建可运行的jar文件。

问题:创建jar文件和依赖项后,当我尝试使用命令启动jar文件时,存在NoCLassDefFoundErrors

java -jar program.jar 

但是类/文件可以在./dedency_jars文件夹中找到??? 我也尝试了以下命令:

  java -cp ./dependency-jars -jar program.jar 

这也行不通。

题:

你知道为什么jvm找不到这些课吗? 哪里不对?

pom.xml中:

  program   org.apache.maven.plugins maven-eclipse-plugin 2.9  true true    org.apache.maven.plugins maven-compiler-plugin 3.1  ${jdk.version} ${jdk.version}    org.apache.maven.plugins maven-jar-plugin 2.4    true dependency-jars/ de.test.MainCLass   ${package-target-folder}    org.apache.maven.plugins maven-javadoc-plugin 2.9.1    javadoc  package create-javadoc  UTF-8 ${package-target-folder}/docs ${package-target-folder}/docs      org.apache.maven.plugins maven-dependency-plugin 2.8   copy-dependencies package  copy-dependencies   ${package-target-folder}/dependency-jars/         

[UPDATE]

创建的MANIFEST.MF看起来像

 Manifest-Version: 1.0 Built-By: ahausden Build-Jdk: 1.7.0_25 Class-Path: dependency-jars/spring-core-4.0.0.RELEASE.jar dependency-j ars/commons-logging-1.1.1.jar dependency-jars/spring-jdbc-4.0.0.RELEA SE.jar dependency-jars/spring-beans-4.0.0.RELEASE.jar dependency-jars /spring-tx-4.0.0.RELEASE.jar dependency-jars/spring-oxm-4.0.0.RELEASE .jar dependency-jars/spring-batch-core-2.2.0.RELEASE.jar dependency-j ars/xstream-1.3.jar dependency-jars/xpp3_min-1.1.4c.jar dependency-ja rs/jettison-1.1.jar dependency-jars/spring-aop-3.2.0.RELEASE.jar depe ndency-jars/spring-context-3.2.0.RELEASE.jar dependency-jars/spring-e xpression-3.2.0.RELEASE.jar dependency-jars/spring-batch-infrastructu re-2.2.0.RELEASE.jar dependency-jars/spring-retry-1.0.2.RELEASE.jar d ependency-jars/spring-batch-test-2.2.0.RELEASE.jar dependency-jars/co mmons-io-1.4.jar dependency-jars/commons-dbcp-1.2.2.jar dependency-ja rs/commons-pool-1.3.jar dependency-jars/commons-collections-3.2.jar d ependency-jars/spring-test-4.0.0.RELEASE.jar dependency-jars/javax.in ject-1.jar dependency-jars/slf4j-log4j12-1.6.1.jar dependency-jars/sl f4j-api-1.6.1.jar dependency-jars/log4j-1.2.16.jar dependency-jars/sp ring-orm-4.0.0.RELEASE.jar dependency-jars/aopalliance-1.0.jar depend ency-jars/mariadb-java-client-1.1.1.jar dependency-jars/hibernate-cor e-4.3.1.Final.jar dependency-jars/jboss-logging-3.1.3.GA.jar dependen cy-jars/jboss-logging-annotations-1.2.0.Beta1.jar dependency-jars/jbo ss-transaction-api_1.2_spec-1.0.0.Final.jar dependency-jars/dom4j-1.6 .1.jar dependency-jars/xml-apis-1.0.b2.jar dependency-jars/hibernate- commons-annotations-4.0.4.Final.jar dependency-jars/hibernate-jpa-2.1 -api-1.0.0.Final.jar dependency-jars/javassist-3.18.1-GA.jar dependen cy-jars/antlr-2.7.7.jar dependency-jars/jandex-1.1.0.Final.jar depend ency-jars/hibernate-annotations-3.5.6-Final.jar dependency-jars/hiber nate-commons-annotations-3.2.0.Final.jar dependency-jars/hibernate-jp a-2.0-api-1.0.0.Final.jar dependency-jars/javassist-3.12.1.GA.jar dep endency-jars/commons-cli-1.3-20140221.042048-103.jar Created-By: Apache Maven 3.1.0 Main-Class: de.test.MainClass Archiver-Version: Plexus Archiver 

最后一行“行”是行分隔符。 似乎MANIFEST.MF文件看起来有点腐败,不是吗?

不确定发生了什么,但这就是我的pom用于使用阴影构建可运行的jar的样子:

     ${basedir}/src/main/resources false  schema.xsd      org.apache.maven.plugins maven-shade-plugin   package  shade     true stand-alone   org.slf4j:slf4j-api:jar: org.slf4j:slf4j-log4j12:jar: org.slf4j:jcl-over-slf4j:jar: commons-logging:commons-logging:jar: commons-logging:commons-logging-api:jar:     *:*  META-INF/*.SF META-INF/*.DSA META-INF/*.RSA    MyFinalRunnableJarName   class.with.main.Method   META-INF/spring.handlers   META-INF/spring.schemas       

最简单的解决方案是使用像这样的maven-assembly-plugin :

  [...]  [...]    maven-assembly-plugin 2.4   jar-with-dependencies   [...]  

尝试提供清单文件的输入:

 Main-Class: YourClassWithMainMethod 

并且还看到这篇文章 。 所以你可以手动制作并看到差异。

如果dependency-jars是一个目录,也可以尝试:

 java -cp ./dependency-jars/* -jar program.jar 

我仍然无法发表评论,所以请说明这些NoCLassDefFoundErrors是什么。 您是否尝试过从Eclipse手动执行相同的jar文件并查看其中的区别?

你的清单中有依赖依赖-jars / commons-cli-1.3-20140221.042048-103.jar,但是你写道你在目录中有SNAPSHOT版本。 并且只有公共 – 气候:公共气 – 气候:20040117.000000在maven中央。

@robermann请看这篇文章 (工作它应该是双引号)

您确定在命令行启动的Java版本是否等于或大于编译时maven使用的版本? 试试java -version

通过命令行,转到“dependency-jars”的父目录并运行: java -jar program.jar

好的,我解决了第二个/更新的问题:

我首先使用eclipse和maven插件来创建可运行的jar文件。 这在所描述的问题中运行。

毕竟我试图从控制台应用程序使用maven 3.1,毕竟它的工作原理。 似乎eclipse maven插件有一些问题。

使用此命令可以创建任何maven项目的jar文件。

mvn clean编译安装