Maven java项目生成,但不运行

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 .......................

我正在从头开始创建一个maven项目,首先学习如何使用maven。 主项目不包含源代码文件,但它有两个模块app和util。应用程序依赖于util。我想从应用程序中获得一个.jar,如果可能的话,没有清单文件。 我能够用mvn clean install编译整个项目,但无法从控制台运行应用程序

主要项目。pom是

我用

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