java - Intellij 多模块 Maven 项目找不到主类

标签 java maven intellij-idea

我正在尝试 maven 多模块项目 https://github.com/shekharkhairnar/maven-multimodule-example

以下是我的项目结构:

enter image description here

我在父项目上做了 mvn clean install 并移动到 sktech-buseness/target 和

当我执行 java -jar sktech-business-1.0-SNAPSHOT.jar

我在 sktech-business-1.0-SNAPSHOT.jar 中得到 no main manifest 属性

我试过maven assembly plugin, shad plugin但是没用

--编辑---

在“konstantin-annikov”发表评论后,我将 maven-jar-plugin 添加到 sktech-business pom 文件中:

<build>
        <plugins>
            <plugin>
                <!-- Build an executable JAR -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>org.sktech.business.BusinessTest</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

但运行 jar 时出现异常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/sktch/domain/Student
        at org.sktech.business.BusinessTest.main(BusinessTest.java:12)
Caused by: java.lang.ClassNotFoundException: org.sktch.domain.Student
        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)
        ... 1 more

非常感谢任何帮助。

最佳答案

让我们检查您的 list 文件。您可以使用任何解压缩实用程序简单地解压缩您的 .jar 文件。 (jar 格式基于流行的 ZIP 格式)。

当我打开 sktech-business-1.0-SNAPSHOT/META-INF/MANIFEST.MF 时,我看到以下内容:

list .MF:

Manifest-Version: 1.0
Created-By: Apache Maven 3.5.0
Built-By: guicey
Build-Jdk: 11.0.5
Class-Path: lib/sktech-domain-1.0-SNAPSHOT.jar
Main-Class: org.sktech.business.BusinessTest

您的应用程序期望在 lib/sktech-domain-1.0-SNAPSHOT.jar 中找到其他 java 类来运行您的应用程序。因此,您运行以下命令的目录 java -jar sktech-business-1.0-SNAPSHOT.jar 应该有一个 lib 目录,其中包含一个名为 sktech-domain-1.0-SNAPSHOT.jar 的文件。

如果您不想复制/移动目录,您可以使用以下 Maven 插件将所有依赖类复制到带有依赖项的 jar 中。将以下代码片段添加到主类所在模块中的 pom.xml 文件中:maven-multimodule-example/sktech-business/pom.xml。

maven-assembly-plugin 片段:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>org.sktech.business.BusinessTest</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

并且您可以通过执行以下命令来运行具有依赖项的 jar:java -jar sktech-business-1.0-SNAPSHOT-jar-with-dependencies.jar

程序输出:

[ComplimentryCourse(id=1, name=Java 8 Fetures), ComplimentryCourse(id=2, name=Advance Java), ComplimentryCourse(id=3, name=Spring Boot), ComplimentryCourse(id=4, name=Database Management)]

关于java - Intellij 多模块 Maven 项目找不到主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68436004/

相关文章:

java - 什么是可序列化?这是什么意思?

java - Maven 依赖项失败并出现 501 错误

java - 在 intellij 13 中存储有关方法参数的信息(可通过反射使用)

scala - 想法 Scala : Could not find output directory

linux - 如何在 Ubuntu 的 IDEA 中设置 git 方式?

负数的Java正则表达式?

java - 为什么内部类可以访问另一个内部类的私有(private)成员?

java - 如何从java中的pom获取模块名称

java - ChromeDriver Selenium 出现 "java.lang.module.InvalidModuleDescriptorException: Provider class org.apache.bsf.BSFManager not in module"错误

java - 如何实例化 MavenResolver 以供 ModelBuilder 使用?