【发布时间】:2012-07-30 07:27:17
【问题描述】:
我在我的独立应用程序中使用 Maven,我想将我的 JAR 文件中的所有依赖项打包到一个库文件夹中,如此处的答案之一所述:
How can I create an executable JAR with dependencies using Maven?
我希望我的最终 JAR 文件有一个库文件夹,其中包含作为 JAR 文件的依赖项,而不像 maven-shade-plugin 那样将依赖项以文件夹的形式放置,如 .m2 文件夹中的 Maven 层次结构。
嗯,实际上当前配置可以满足我的需求,但是在运行应用程序时加载 JAR 文件时遇到问题。我无法加载类。
这是我的配置:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.myapp.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
该项目在 Eclipse 中运行良好,并且 JAR 文件按我的意愿放置在我的最终 JAR 文件内的库文件夹中,但是当从目标文件夹运行最终 JAR 文件时,我总是得到ClassNotFoundException:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.myapp.MainClass. Program will exit.
如何解决这个异常?
【问题讨论】:
-
您使用哪个命令来运行 jar?也许你可能更喜欢 maven exec 插件?
-
异常信息与POM文件相比是否过时?似乎正在搜索主类
com.myapp.MainClass,而不是com.tastycafe.MainClass。 -
@Duncan Jones,复制粘贴问题,我编辑了问题
-
注意,如果你想要jar里面的jar,那么Java中的标准类加载器无法理解它们。
-
如何使其将maven依赖项放在lib文件夹中但在JAR之外?
标签: java maven jar build-process classloader