Java 带有外部Jar和依赖项的可执行Jar,使用maven
有两个Java应用程序:应用程序1和应用程序2 我想在应用程序2中使用应用程序1的jar文件。我想创建应用程序2的可执行jar,以便通过命令行将应用程序2作为jar执行 应用程序1:应用程序1中有ClassA.java、ClassB.java等类 pom.xml:Java 带有外部Jar和依赖项的可执行Jar,使用maven,java,Java,有两个Java应用程序:应用程序1和应用程序2 我想在应用程序2中使用应用程序1的jar文件。我想创建应用程序2的可执行jar,以便通过命令行将应用程序2作为jar执行 应用程序1:应用程序1中有ClassA.java、ClassB.java等类 pom.xml: <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
maven汇编插件
完全合格
带有依赖项的jar
我使用mvn clean compile assembly:single创建了应用程序1的jar文件
现在,我添加了以前创建的应用程序1的jar文件,作为应用程序2中的外部jar
在应用程序2中有一个主类:migration.DataMigration.java
应用程序2的pom.xml中也存在依赖关系。
数据迁移类使用ClassA.java和ClassB.java
现在我想创建一个应用程序的可执行jar
我试图使用maven assembly插件创建这个插件,但我得到了错误:ClassA.class未找到,ClassB.class未找到:这意味着应用程序1的jar在可执行jar创建期间不可用
但当我在eclipse中运行应用程序2时,它会正确地执行,不会出错
任何人都可以建议如何在application2.jar中创建应用程序2的可执行jar,您可以指定将application1.jar添加到其类路径中。 在application2.jar的META-INF/manifest.mf文件中添加:
Class-Path:application1.jar
如果application1.jar存储在application2.jar的旁边(在同一目录中),则运行时会将其添加到类路径中
要在maven构建中实现这一点:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
...
</plugin>
org.apache.maven.plugins
否的可能重复,它没有解决问题:application1.jar保存在应用程序2的Referenced Libraries文件夹中。不知道“Referenced Libraries”文件夹。这是一个标准的java概念吗?你在谈论Eclipse吗?不,它只是一个文件夹。如果您将在maven项目中添加外部jar,那么它将放在这个文件夹中。使用我建议的maven jar插件配置,您可以看看(由maven)生成的application2.jar中META-INF/manifest.mf文件的内容吗?恐怕我无法进一步帮助您。我总是使用本地maven存储库在项目之间交换JAR。这样,我的所有依赖项都可以通过