0

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

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

当我使用以下命令时,应用程序执行良好:java -cp "application.jar;dependency-jars/*" com.my.Application. 除了应用程序依赖项之外,“dependency-jars”文件夹还将包含由其消费者丢弃的 jars。我想让它成为一个可执行的 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 在运行时无法找到其依赖项。以上是不是有什么问题。

谢谢。

4

1 回答 1

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 ,这个答案是不完整的,它可以帮助你,以防你的依赖 jar 有冲突的包和类名。

于 2013-11-16T05:55:09.467 回答