maven打出jar中动态替换占位符

使用场景:

maven打出的jar中pom.xml动态替换占位符

有些时候某些公共工具jar包被项目引用后发现公共jar的pom.xml中的version依然还是占位符,例如下面

java 复制代码
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

如何让其打包后动态替换呢,即替换为最终的版本,像下面这样

java 复制代码
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>>1.18.8</version>
        </dependency>

打包后发现会在jar包中生成如果路径:target/classes/META-INF/maven/ g r o u p I d / {groupId}/ groupId/{artifactId}/pom.xml,经测试这个pom.xml才是最终生效的配置,那么如何替换呢。经过查找maven源码发现是硬编码到jar中的,源码如下

org.apache.maven.archiver.MavenArchiver#createArchive

所以我这边采取的是通过copy-resources重新替换解析后pom到META-INF/maven/ g r o u p I d / {groupId}/ groupId/{artifactId}/pom.xml,解决方法如下:

xml 复制代码
<dependencies>
    ......
</dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <!--不要定义为default-resources,否则会覆盖maven默认的-->
                        <id>default-resources1</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <!--将当前项目下pom.xml解析替换占位符复制到目标文件中-->
                            <outputDirectory>target/classes/META-INF/maven/${groupId}/${artifactId}/</outputDirectory>
                            <overwrite>true</overwrite>
                            <resources>
                                <resource>
                                    <directory>./</directory>
                                    <includes>
                                        <include>pom.xml</include>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-plugin-plugin</artifactId>
                <version>3.5</version>
                <configuration>
                    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

另外maven如何错误的类不打入包内

因为依赖的环境不同,有些类可能会出现编译错误不想打入jar中,可以通过在profile中自定义插件排除,如下:在saas_prod打包时所有com/xxx/local 包下面的类将不会打入其中

xml 复制代码
    <profile>
            <id>saas_prod</id>
            <activation>
               <activeByDefault>true</activeByDefault>
           </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.1</version>
                        <configuration>
                            <excludes>
                                <exclude>com/xxx/local/**/*.java</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

有问题随时私聊沟通,相互进步

相关推荐
字节源流6 小时前
关于maven的依赖下不下来的问题
java·maven
用手手打人18 小时前
SpringBoot(一)--- Maven基础
spring boot·后端·maven
正在走向自律20 小时前
2025年、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建+Maven下载及配置)
java·jvm·jdk·maven·intellij-idea
SuperherRo1 天前
Web开发-JavaEE应用&SpringBoot栈&SnakeYaml反序列化链&JAR&WAR&构建打包
前端·java-ee·jar·反序列化·war·snakeyaml
拾贰_C1 天前
【SpringBoot】MyBatisPlus(MP | 分页查询操作
java·spring boot·后端·spring·maven·apache·intellij-idea
weixin_472339461 天前
Maven 下载安装与配置教程
java·maven
苍煜1 天前
Maven构建流程详解:如何正确管理微服务间的依赖关系-当依赖的模块更新后,我应该如何重新构建主项目
java·微服务·maven
坎布里奇1 天前
java -jar命令运行 jar包时如何运行外部依赖jar包
java·pycharm·jar
.又是新的一天.1 天前
使用IDEA创建Maven版本的web项目以及lombok的使用
java·maven·intellij-idea
hnlucky2 天前
Windows 上安装下载并配置 Apache Maven
java·hadoop·windows·学习·maven·apache