Maven java项目生成,但不运行
我正在从头开始创建一个maven项目,首先学习如何使用maven。 主项目不包含源代码文件,但它有两个模块app和util。应用程序依赖于util。我想从应用程序中获得一个.jar,如果可能的话,没有清单文件。 我能够用mvn clean install编译整个项目,但无法从控制台运行应用程序 主要项目。pom是 我用Maven java项目生成,但不运行,java,maven,noclassdeffounderror,Java,Maven,Noclassdeffounderror,我正在从头开始创建一个maven项目,首先学习如何使用maven。 主项目不包含源代码文件,但它有两个模块app和util。应用程序依赖于util。我想从应用程序中获得一个.jar,如果可能的话,没有清单文件。 我能够用mvn clean install编译整个项目,但无法从控制台运行应用程序 主要项目。pom是 我用 mvn clean install [INFO] Reactor Summary: [INFO] [INFO] myproject .......................
mvn clean install
[INFO] Reactor Summary:
[INFO]
[INFO] myproject .......................................... SUCCESS [ 0.406 s]
[INFO] util ............................................... SUCCESS [ 2.074 s]
[INFO] app ................................................ SUCCESS [ 0.535 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
我的项目,util,app成功了
我试着用它运行
java -jar app/target/app-0.0.1.jar
Hello World!
Exception in thread "main" java.lang.NoClassDefFoundError: com/proba/util/UtilClass
at com.proba.app.App.main(App.java:17)
Caused by: java.lang.ClassNotFoundException: com.proba.util.UtilClass
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
正如你所看到的,你好,世界!已打印出来,但找不到UtilClass。
我能够从eclipse运行构建,但不能从控制台运行。
我做错了什么?你有什么想法吗?在app module的pom.xml中,你已经编写了编译,这就是为什么在运行时你的jar没有进入类路径。删除编译行。它就会工作 在app module的pom.xml中,您已经编写了编译,这就是为什么在运行时您的jar没有进入类路径。删除编译行。它就会工作 您缺少的是UtilClass的罐子。您只需要在pom中添加阴影插件。
作为参考:您缺少的是UtilClass的jar。您只需要在pom中添加阴影插件。
作为参考:Util.jar作为依赖项添加到应用程序pom.xml中,但范围是编译的。因此,它不会作为类路径条目添加到清单中。删除scope元素,然后重试。Util.jar作为依赖项添加到应用程序pom.xml中,但作用域是可编译的。因此,它不会作为类路径条目添加到清单中。删除scope元素,然后重试。如果从控制台运行构建,会发生什么?尝试直接从目标目录运行jar-我猜这与util jar相对于当前工作目录的位置有关。Gimby:因此我得到了相同的结果:cd util/target/然后是java-jar../../app/target/app-0.0.1.jar你好,世界!主线程java.lang.NoClassDefFoundError中出现异常:com/proba/util/UtilClassJF Meier:我从控制台运行它,这就是我看到NoClassDefFoundError的时候了看看如果从控制台运行构建会发生什么?试着直接从目标目录运行jar-我猜这与util jar相对于当前工作目录的位置有关。Gimby:因此我得到了相同的结果:cd util/target/然后是java-jar../../app/target/app-0.0.1.jar你好,世界!主线程java.lang.NoClassDefFoundError中的异常:com/proba/util/UtilClassJF Meier:我从控制台运行它,这是当我看到NoClassDefFoundError时,请看这里,我尝试过不使用它,也尝试过提供,等等。这些都不起作用。我尝试过不使用它,也尝试过提供,等等。这些都不起作用。您能更具体一点吗?我应该在哪个pom中添加它吗?Util或app或主项目。@thamas主项目太棒了!这就解决了问题。现在我在控制台中得到了预期的输出:java-jarapp/target/app-0.0.1.jar Hello World!你好,来自模块Util的世界!非常感谢!我接受了这个答案。你能更具体一点吗?我应该在哪个pom中添加它吗?Util或app或主项目。@thamas主项目太棒了!这就解决了问题。现在我在控制台中得到了预期的输出:java-jarapp/target/app-0.0.1.jar Hello World!你好,来自模块Util的世界!非常感谢!接受了这个答案。java-cp util/target/util-0.0.1.jar-jar app/target/app-0.0.1.jar不幸地给出了相同的结果。据我所知,java忽略了使用-cp is-jar。有广泛的文档证明,使用-jar运行应用程序时-cp没有任何效果。类路径是在jar的清单中定义的,因此当您双击runnable jar.java-cp util/target/util-0.0.1.jar-jar-app/target/app-0.0.1.jar时,它也可以工作。不幸的是,jar给出了相同的结果。据我所知,java忽略了使用-cp is-jar。有广泛的文档证明,使用-jar运行应用程序时-cp没有任何效果。类路径是在jar的清单中定义的,因此只要双击可运行的jar,它也可以工作。
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.proba</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1</version>
</parent>
<artifactId>app</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.proba</groupId>
<artifactId>util</artifactId>
<version>0.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.proba.app.App</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>site-deploy</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.proba.app.App</mainClass>
<!--<arguments> <argument>myArg1</argument> <argument>myArg2</argument>
</arguments> -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
import com.proba.util.UtilClass;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
UtilClass uc = new UtilClass();
System.out.println( "QQQQQ: " + uc.print() );
}
}
mvn clean install
[INFO] Reactor Summary:
[INFO]
[INFO] myproject .......................................... SUCCESS [ 0.406 s]
[INFO] util ............................................... SUCCESS [ 2.074 s]
[INFO] app ................................................ SUCCESS [ 0.535 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
java -jar app/target/app-0.0.1.jar
Hello World!
Exception in thread "main" java.lang.NoClassDefFoundError: com/proba/util/UtilClass
at com.proba.app.App.main(App.java:17)
Caused by: java.lang.ClassNotFoundException: com.proba.util.UtilClass
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more