如何让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
相关产品推荐
相关产品推荐

