问题描述
我有一个 java 程序,我使用 maven 在 intellij 中编码。我将它导出为 jar 并尝试从命令行运行,但它一直告诉我
错误:无法找到或加载主类 com.company.Main 引起:java.lang.classNotFoundException:com.company.Main
然后我尝试从命令行运行程序本身,这也告诉我它找不到主类
命令行: 对于 jar:java -jar selenium_project.jar
用于运行程序:java com.company.Main
对于 jar,我从它所在的文件夹运行它。对于程序,我从程序的根目录运行它。
Pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>com.company.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins></build>
清单:
Manifest-Version: 1.0
Main-Class: com.company.Main
这可能是 maven 的问题,我不知道。我创建了一个简单的 hello world 程序并从命令行运行它并且它工作正常。我是这样运行的 (c://etc)../src/> java com.company.HelloWorld。但是当我再次尝试这个时,它找不到主类。 谢谢
编辑: 我改为使用 maven-assembly-plugin 并重新构建了 jar 仍然无法正常工作
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
com.company.Main
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins></build>
class structure to show where main class is
主类中的代码
public class Main {
public static void main(String[] args) throws IOException,sqlException {
System.out.println("hello");
Executor ex = new Executor();
}
}
解决方法
您的错误可能是您的 Main 类位于错误的包中。
此外,如果您有依赖项,请不要认为您需要 Maven shade 插件或 Maven assembly 插件来构建可执行的 jar。
,我不知道是什么问题。我尝试创建一个新程序,我复制了类并重新制作了 pom.xml 文件,我的新程序除了一个依赖项(chrome 选项)外都可以工作,但我认为这不是导致问题的原因。所以现在我只需要弄清楚为什么 Chrome 选项不起作用,但新程序中的实际 jar 确实可以运行。
,来自: https://www.xspdf.com/resolution/54971948.html 要从 jar 文件中提取文件,请使用 x ,如:C:\Java> jar xf myFile.jar。要仅从 jar 文件中提取某些文件,请提供它们的安装存档程序。 JAR 文件就像 ZIP 文件一样工作。您可以使用任何存档程序来提取它们。 2. 找到要解压的 JAR 文件。使用文件资源管理器(按 Win + E 打开文件资源管理器)或 Mac 上的 Finder 到 3. 右键单击 JAR 文件。这样做 。如何从 jar 中提取清单文件。提取 JAR 文件的内容。