Java 运行具有依赖项的可执行jar时出现问题
嘿,我一直在做一个项目,我希望能够从命令行作为可执行jar运行。我已经能够使用mavenassembly:single命令创建具有依赖项的jar。我的pom看起来像这样Java 运行具有依赖项的可执行jar时出现问题,java,maven,command-line,Java,Maven,Command Line,嘿,我一直在做一个项目,我希望能够从命令行作为可执行jar运行。我已经能够使用mavenassembly:single命令创建具有依赖项的jar。我的pom看起来像这样 <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</ve
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<mainClass>org.openmetadata.main.OmadUpdate</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
我也试过了
java -cp omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.openmetadata.main.OmadUpdate
不幸的是,在每种情况下,我都会收到一个java.lang.NoClassDefFoundError:org/openmetadata/main/OmadUpdate。我很困惑,因为我知道我的主类在org.openmetadata.main包中,但却找不到它。我发现这尤其令人困惑,因为在我的pom中,我指定该类作为我的主类。我曾尝试将主类的名称更改为src.main.java.org.openmetadata.main.OmadUpdate,也只是简单地更改为OmadUpdate,但这两种更改似乎都没有效果。提前谢谢你的帮助 我在上面的清单中没有看到
类路径
条目,但是您的很长文件名提到了依赖项。如果此jar文件中存在程序依赖的jar,则必须在类路径
部分中枚举它们。有关详细信息,请参阅。另一个选项可能是使用。不幸的是,这个页面有点少,但是插件在正确配置时做了应该做的事情。我终于能够通过在pom中添加以下代码来实现这一点
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.openmetadata.omadupdate.OmadUpdate</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven汇编插件
2.3
真的
org.openmetadata.omadupdate.omadupdate
带有依赖项的jar
组装
包裹
单一的
如果pom中没有executions标记及其子项,那么只有maven依赖项将被添加到jar中,而项目本身的类将不会被添加 但是根据这个页面,我似乎不需要指定一个类路径,它似乎只需要根据需要打包maven依赖项。但是,我认为我可能会犯错误。打开jar文件,在META-INF目录中查找MANIFEST.MF文件。是否指定了类路径?好的,因此我在Mavens上发现,将true添加到pom.xml中应该会处理类路径,但是我仍然存在一个问题,即当我尝试运行可执行jar时,找不到我的主类。发布MANIFEST.MF的内容。还要验证jar文件是否包含以下结构“org/openmetadata/main/OmadUpdate.class”Manifest-Version:1.0 Build By:Andrew Build Jdk:1.6.027Created By:Apache Maven main class:org.openmetadata.main.OmadUpdate Archiver Version:Plexus Archiver这是我的清单,你是正确的,没有类路径,但根据我在上一次回复中引用的网站,据我所知,Maven应该添加一个类路径。。。
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>org.openmetadata.omadupdate.OmadUpdate</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>