Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有外部Jar和依赖项的可执行Jar,使用maven_Java - Fatal编程技术网

Java 带有外部Jar和依赖项的可执行Jar,使用maven

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>

有两个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>
      <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。这样,我的所有依赖项都可以通过