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>

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

相关推荐
摆烂且佛系1 天前
IDEA Maven 仓库配置优先级
github·maven·intellij-idea
momo_via1 天前
maven下载与安装及在IDEA中配置maven
java·maven·intellij-idea
李贺梖梖2 天前
Maven 设置项目编码,防止编译打包出现编码错误
java·maven
洛克大航海2 天前
Ubuntu安装JDK与Maven和IntelliJ IDEA
ubuntu·jdk·maven·intellij idea
假客套2 天前
2025 FastExcel在Java的Maven项目的导出和导入,简单易上手,以下为完整示例
java·maven·fastexcel
有梦想的攻城狮2 天前
Maven中的settings.xml文件配置详解
xml·java·maven·settings.xml
李贺梖梖2 天前
maven本地仓库有相应的依赖,依旧会从远程仓库拉取问题的原因及解决
maven
纳于大麓3 天前
Android Maven私服搭建(Windows)
java·maven
诸神缄默不语3 天前
Maven用户设置文件(settings.xml)配置指南
xml·java·maven
安逸sgr3 天前
SpringMVC启动流程
java·jvm·spring·spring cloud·eclipse·tomcat·maven