使用 maven 如何在使用 `maven-assembly-plugin` 时将所有依赖项和我的 Java 项目文件捆绑在输出 jar 中?

With maven how to bundle all dependencies AND my Java project filesin the output jar when using `maven-assembly-plugin`?

我正在使用 maven-assembly-plugin 从我的 maven 项目创建一个输出 jar。我的 pom.xml 的相关部分是这样的:

.
.
.
<dependencies>
    <dependency>
      .
      .
      .
    </dependency>
    .
    .
    .
</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        .
        .
        .
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>my.package.TheApp</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
        .
        .
        .
    </plugins>
</build>
.
.
.

当我 运行 `mvn clean install assembly:single`` 生成的 jar 文件确实包含依赖项,但它 包含我的项目文件. 运行 装有

的罐子
java -jar TheApp-0.1.2-SNAPSHOT-jar-with-dependencies.jar

我收到消息 Error: Could not find or load main class my.package.TheApp那么如何包含我的项目文件呢?(我想设置 useProjectArtifact,但是 according to the maven-assembly-plugin doco 这个 属性 默认是 true .)

通过浏览 Stack Overflow I found the solution

运行 mvn clean compile assembly:single 而不是 mvn clean install assembly:single。 :-)

或者甚至更好地将 pom.xml 程序集绑定到包阶段(感谢@khmarbaise!):

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  .
  .
  .
  <executions>
    <execution>
      <id>make-assembly</id> <!-- this is used for inheritance merges -->
      <phase>package</phase> <!-- bind to the packaging phase -->
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

然后是 运行 mvn clean package(或者 mvn clean install 如果你愿意的话)。