Maven 阴影插件删除 "original"

Maven shade plugin remove "original"

每次我 运行 maven 打包生成一个更新的 jar,它会创建一个 "original" jar 文件,以及更新的文件。

这对我来说尤其是个问题,因为我 运行 自动编译编译的 jar,并且他们都在尝试启动。

我想要创建的只是生成的 ${project.artifactId}-${project.version}-shaded.jar 文件,而不是 "original" 文件。有没有办法让它覆盖而不进行备份(我假设这就是它正在做的)?

我该如何解决这个问题?

这是我的 pom:

<groupId>com.spiromarshes</groupId>
<artifactId>LiveDebugTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>LiveDebugTest</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <defaultGoal>clean package</defaultGoal>
    <plugins>
        <plugin>
            <version>3.6.1</version>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <minimizeJar>true</minimizeJar>
                        <outputDirectory>${dir}</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<repositories>
    <repository>
        <id>spigotmc-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
    </repository>
    <repository>
        <id>sonatype</id>
        <url>https://oss.sonatype.org/content/groups/public/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.spigotmc</groupId>
        <artifactId>spigot-api</artifactId>
        <version>1.12.2-R0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

通过在 maven-shade-plugin 的配置部分下使用 <outputFile>${dir}/${project.artifactId}.jar</outputFile> 解决。


完整示例,上下文:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <outputFile>${dir}/${project.artifactId}.jar</outputFile>
      <filters>
        <filter>
          <artifact>*:*</artifact>
          <excludes>
            <exclude>META-INF/MANIFEST.MF</exclude>
            <exclude>META-INF/*.SF</exclude>
            <exclude>META-INF/*.DSA</exclude>
            <exclude>META-INF/*.RSA</exclude>
          </excludes>
        </filter>
      </filters>
    </configuration>
  </plugin>

包的原始 Maven 预期文件名包含版本号。
有一个shade-plugin配置,不仅可以防止“原始”前缀的文件名,还可以实现原始的Maven包名。

        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.outputDirectory}</outputDirectory>
                        <finalName>${project.artifactId}-${project.version}</finalName>
                        ..                          ..
                        .. more shade configuration ..
                        ..                          ..
                    </configuration>
                </execution>
            </executions>
        </plugin>