Java在执行使用精确类路径参数配置的maven-jar-plugin生成的可执行jar时无法找到依赖项

时间:2013-11-16 05:08:30

标签: java classpath executable-jar maven-jar-plugin

以下是我的java应用程序的目录结构:

application.jar
dependency-jars
     a.jar
     b.jar
     c.jar

当我使用以下命令时,应用程序执行正常:java -cp "application.jar;dependency-jars/*" com.my.Application。除了应用程序依赖项之外,'dependency-jars'文件夹还将删除其消费者的jar。我想让它成为一个可执行jar,以便让消费者轻松调用它。为了创建可执行jar,我正在使用maven jar插件。我想模拟上面的命令行。我使用了以下maven jar插件配置:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>2.4</version>
   <configuration>
      <archive>
         <manifest>
            <mainClass>com.my.Application</mainClass>
            <addClasspath>true</addClasspath>
         </manifest>
         <manifestEntries>
            <Class-Path>dependency-jars/*</Class-Path>
         </manifestEntries>
      </archive>
   </configuration>
</plugin>

生成的jar在执行时无法在运行时找到它的依赖项。以上是否有任何问题。

感谢。

1 个答案:

答案 0 :(得分:0)

您需要使用maven-assembly-plugin,例如:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.4</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.my.Application</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id>
          <phase>package</phase> <!-- bind to the packaging phase -->
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

然后用

运行它
mvn clean compile assembly:single

编译目标应该在汇编之前添加:single。通常,此目标与构建阶段相关联,以自动执行。这可确保在执行mvn install时构建JAR。

如果没有提到maven-shade-plugin,这个答案就不会完整,如果您的依赖项包含有冲突的包名和类名,它可以帮助您。