如何配置Maven仅部署额外元数据构件而排除Jar包?
解决方案:跳过默认Jar的部署,仅部署自定义元数据构件
你可以通过调整Maven构件的附加(attach)状态实现需求:将默认生成的Jar设置为不附加到构建生命周期,让install/deploy插件忽略它;同时确保build-helper生成的元数据构件保持附加状态,正常部署到Nexus。
具体配置步骤
配置maven-jar-plugin,禁止默认Jar被附加
这个配置会让Maven正常生成Jar包(满足你打包进Docker的需求),但不会把它加入待部署的构件列表:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <!-- 不将默认Jar附加到构建,install/deploy时会自动忽略它 --> <attach>false</attach> </configuration> </plugin>保留build-helper-maven-plugin的配置
你原本用build-helper添加的元数据构件,默认会被自动附加到构建生命周期,无需额外修改。示例配置如下(可根据你的实际文件路径、类型调整):<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.4.0</version> <executions> <execution> <id>attach-metadata-artifacts</id> <phase>package</phase> <goals> <goal>attach-artifact</goal> </goals> <configuration> <artifacts> <artifact> <file>${project.build.directory}/metadata-a.json</file> <type>json</type> <classifier>meta-a</classifier> </artifact> <artifact> <file>${project.build.directory}/metadata-b.yaml</file> <type>yaml</type> <classifier>meta-b</classifier> </artifact> </artifacts> </configuration> </execution> </executions> </plugin>
原理说明
Maven的install和deploy插件只会处理被附加到项目构件列表的文件。通过maven-jar-plugin的<attach>false</attach>,默认Jar不会进入这个列表,自然会被跳过;而build-helper添加的构件默认处于附加状态,会被正常部署到Nexus。同时,Jar包仍会在target目录生成,完全不影响你后续打包进Docker镜像的操作。
内容的提问来源于stack exchange,提问作者Vincent F
相关产品推荐
相关产品推荐

