You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Maven deploy:deploy-file仅部署Assembly插件生成的可执行Jar

仅部署Maven Assembly插件生成的可执行Jar

我正在使用Maven和Maven Assembly插件构建Java应用,生成包含依赖的可执行Jar。target目录里有多个Jar和其他文件,但我只想部署Assembly插件生成的那个可执行Jar。

我尝试用mvn deploy:deploy-file命令,指定了以下参数:

  • file
  • repositoryId
  • url
  • artifactId
  • groupId
  • version

但执行后Maven部署了所有文件,而不是仅可执行Jar。我还尝试禁用了默认的deploy步骤:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <executions>
        <!-- disable standard deploy -->
        <execution>
            <id>default-deploy</id>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

我的pom.xml的build部分如下:

<build>
    <!--suppress UnresolvedMavenProperty -->
    <finalName>${project.artifactId}-${BUILD_DATE}</finalName>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <filtering>true</filtering>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>main.PAtrackMain</mainClass>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
            <manifestEntries>
              <!--suppress UnresolvedMavenProperty -->
              <Implementation-Build>${BUILD_DATE}</Implementation-Build>
            </manifestEntries>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <appendAssemblyId>true</appendAssemblyId>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
        <executions>
          <!-- disable standard deploy -->
          <execution>
            <id>default-deploy</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

怎么才能只部署Assembly生成的可执行Jar,不部署其他文件?


解决方案

方法1:配置插件绑定,自动部署Assembly生成的Jar

修改pom.xml中的插件配置,让Assembly插件在package阶段生成Jar,同时配置deploy插件仅部署这个可执行Jar:

<plugins>
  <!-- 配置Assembly插件绑定到package阶段,确保生成可执行Jar -->
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.6.0</version>
    <configuration>
      <!-- 保留原有配置 -->
      <archive>
        <manifest>
          <mainClass>main.PAtrackMain</mainClass>
          <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
          <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
        </manifest>
        <manifestEntries>
          <Implementation-Build>${BUILD_DATE}</Implementation-Build>
        </manifestEntries>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <appendAssemblyId>true</appendAssemblyId>
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

  <!-- 配置deploy插件,仅部署Assembly生成的Jar -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
      <!-- 禁用默认deploy -->
      <execution>
        <id>default-deploy</id>
        <phase>none</phase>
      </execution>
      <!-- 自定义deploy步骤 -->
      <execution>
        <id>deploy-assembly</id>
        <phase>deploy</phase>
        <goals>
          <goal>deploy-file</goal>
        </goals>
        <configuration>
          <file>${project.build.directory}/${project.build.finalName}-jar-with-dependencies.jar</file>
          <repositoryId>你的仓库ID</repositoryId>
          <url>你的仓库地址</url>
          <groupId>${project.groupId}</groupId>
          <artifactId>${project.artifactId}</artifactId>
          <version>${project.version}</version>
          <packaging>jar</packaging>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

执行mvn clean deploy即可自动完成可执行Jar的生成与部署。

方法2:通过命令行精准指定部署文件

如果不想修改pom,直接用命令行执行时,必须明确指定Assembly生成的Jar路径,避免Maven默认扫描整个target目录:

mvn deploy:deploy-file \
  -Dfile=target/你的项目名-${BUILD_DATE}-jar-with-dependencies.jar \
  -DrepositoryId=你的仓库ID \
  -Durl=你的仓库地址 \
  -DgroupId=你的groupId \
  -DartifactId=你的artifactId \
  -Dversion=你的版本号 \
  -Dpackaging=jar

替换命令中的占位符,确保-Dfile指向具体的可执行Jar文件,而非目录。

方法3:将Assembly Jar设为项目主构件

如果希望Assembly生成的Jar替代默认Jar作为项目主构件,可配置Assembly插件的attach参数:

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.6.0</version>
  <configuration>
    <attach>true</attach> <!-- 将Assembly Jar附加为项目构件 -->
    <!-- 保留原有配置 -->
    <archive>
      <manifest>
        <mainClass>main.PAtrackMain</mainClass>
        ...
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <appendAssemblyId>true</appendAssemblyId>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

若不需要默认Jar,可额外配置maven-jar-plugin禁用其生成:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <executions>
    <execution>
      <id>default-jar</id>
      <phase>none</phase>
    </execution>
  </executions>
</plugin>

之后执行mvn clean deploy就只会部署Assembly生成的可执行Jar。

内容的提问来源于stack exchange,提问作者AlexW00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:15:50