【问题标题】:How to fix Could not find or load main class error when building a JAR with IntelliJ?使用 IntelliJ 构建 JAR 时如何修复无法找到或加载主类错误?
【发布时间】:2020-11-02 23:23:35
【问题描述】:

我正在尝试使用 IntelliJ 从我的 Maven 项目构建一个 jar,但是在运行 jar 时我得到了Error: Could not find or load main class

我有 3 个类(一个包含我的主要方法和一个简单的打印,另外 2 个是空的)。我有一个带有一个依赖项的 pom 文件:

<build>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>8</source>
                <target>8</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>

                        <mainClass>MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

    </plugins>
</build>

<repositories>
    <repository>
        <id>red-hat</id>
        <url>https://maven.repository.redhat.com/earlyaccess/all/</url>
    </repository>
</repositories>


<dependencies>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
        <version>2.22.0</version>
    </dependency>
</dependencies>

我尝试从 hereherehere 获得帮助,但似乎没有任何帮助。我很可能错过了对如何构建 jar 的一些基本了解。这是项目结构。任何帮助将不胜感激。

【问题讨论】:

  • 您是使用 Maven 构建 jar 还是使用 IntelliJ IDEA 工件?最后一个 jar 里面有什么,你看到里面的类和正确的清单文件了吗?
  • 我使用 IntelliJ 工件。用jar tf .\KafkaToBigQueryJAR.jar检查JAR我可以看到manifast和类文件META-INF/MANIFEST.MF KafkaToBigQuery.class KafkaToBigQueryOptions.class META-INF/ Utils.class
  • META-INF/MANIFEST.MF 里面有什么?你是如何配置工件的?见jetbrains.com/help/idea/artifacts.html。您可能需要指定现有清单文件的位置或在自动生成的清单中指定主类。由于您使用 IntelliJ IDEA 构建工件,因此您的 Maven 配置根本不相关,并且带有 pom.xml 内容的问题标签只会让试图在这里帮助您的用户感到困惑。要使用 Maven 构建工件,请在 Maven 工具窗口中运行 package 目标,它将生成一个可能适合您的不同 jar。
  • 感谢您的回复。当我没有任何 maven 依赖项时,我可以创建一个可以工作的简单 jar。我在我的 pom 中添加依赖项后立即收到错误,所以我认为它也与 maven 相关
  • stackoverflow.com/a/42200519/104891stackoverflow.com/a/45169655/104891。带有数字签名的 Jar 依赖项将破坏最终的工件。

标签: java maven intellij-idea pom.xml


【解决方案1】:

只需将&lt;mainClass&gt;MyMainClass&lt;/mainClass&gt; 替换为类路径中的实际主类即可。

【讨论】:

  • 这就是我已经拥有的。我只是掩盖了它。我试过&lt;mainClass&gt;KafkaToBigQuery&lt;/mainClass&gt;&lt;mainClass&gt;target.classes.KafkaToBigQuery&lt;/mainClass&gt;&lt;mainClass&gt;classes.KafkaToBigQuery&lt;/mainClass&gt; 没有任何改变
  • 您的掩饰使回答问题变得非常困难。试试 YourPackageName.KafkaToBigQuery
  • 我试过&lt;mainClass&gt;main.java.KafkaToBigQuery&lt;/mainClass&gt; 和我在上一条评论中提到的那些。我的包结构只是默认的
  • 常见的包名如下:com.myproject.app
猜你喜欢
  • 2017-03-30
  • 2017-12-14
  • 2018-06-12
  • 2017-11-06
  • 2021-12-10
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多