使用 Maven 2 构建可运行的罐子

我对Maven的咒语比较陌生,但我正在尝试用Maven构建一个命令行可运行的jar。我已经设置了我的依赖项,但是当我运行并尝试运行jar时,发生了两件事。首先,找不到主类,这是可纠正的。当我纠正这一点时,我在运行时收到错误,指出找不到类。mvn install

Maven 没有将我的依赖项库打包到 jar 中,因此我无法将 jar 作为独立应用程序运行。如何更正此问题?


答案 1

执行此操作的最简单方法是使用 和 预定义的描述符创建程序集。您还需要为此uber jar生成一个带有主类条目的清单。下面的代码段显示了如何配置程序集插件以执行此操作:maven-assembly-pluginjar-with-dependencies

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

然后,要生成程序集,只需运行:

mvn assembly:assembly

如果要将程序集作为构建的一部分生成,只需将 mojo 绑定到包阶段:assembly:single

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

只需运行:

mvn package

答案 2

Maven 不会将依赖项打包到 jar 文件中,因为您通常不会使用 Java 程序执行此操作。

相反,您将依赖项与 jar 文件一起交付,并在清单的 Class-Path 标头中提及它们。

要走这条路,您需要为maven-jar-plugin启用属性(在此处记录)。addClasspath

如果你真的想把所有的依赖关系都包含在你的jar文件中,那么你可以使用Maven Assembly插件来创建一个带有依赖关系的jar


推荐