`

maven 根据P参数值打包动态修改properties文件中值或一定properties

阅读更多

由于本人 最近忙着公司事情,昨天没有写博客,今天就继续写吧

需求:由于最近开发clover项目 ,没有使用spring,更没有使用任何框架,而使用J2EE的web工程,所以连接ZK和MongoDB、Redis等服务器需用指定properties文件,

而目前公司又分各套环境(dev、test、product),所以希望打包的时候 根据profile id 来动态使用不同环境properties文件 或者动态修改properties参数值

方法一:使用一套properties配置文件,但具体参数使用${key}占位符方式打包替换

maven的pom中指定每套环境的参数值

我们还要启动resources的filter过滤器:

按照上述配置后,我们执行maven打包操作后:

我们可以看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替换到指定环境的参数了

由于 有些老系统会在项目中的resources下指定各套环境配置文件,如下图片:

但是我们打包后 只希望将指定环境下的*.properties文件都移动到classes下,所以可以考虑使用方法二

方法二:使用maven-antrun-plugin插件方式实现

我们只在打包dev环境:

我们要指定resources.dir目录为src/main/resources/dev

我们增加一个plugin 为maven-antrun-plugin,由于我只要在子工程clover-core下面移动这几个文件,最终打成一个jar包,所以要把这个plugin代码放在clover-core下的pom.xml文件,如果把这个plugin放在父工程的pom.xml下那就移动所有的子工程下resources文件

还是贴上代码吧:

 

<build>
    <finalName>clover-core-${clover.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>compile</id>
                    <phase>compile</phase>
                    <configuration>
                        <tasks>
                            <echo message="********************** copy resources to classpath*************************"/>
                            <echo message="********************** copy ${resources.dir} to classpath*************************"/>
                            <copy todir="target/classes" overwrite="true">
                                <fileset dir="${resources.dir}">
                                    <include name="*.*"/>
                                    <include name="*/*.*"/>
                                </fileset>
                            </copy>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

 

 

我们执行打包后:

我们可以看到clover-core下已经将这几个*.properties移动到classes下了

个人还是比较推荐第一种方式

PS:有的时候 我们想通过动态打包,生成的子工程的名字是带各套环境, 比如:clover-core-dev-1.0.jar

我们在父工程的profile下设置clover.version

子工程clover-core想最终打包是clover.version指定的环境+版本号:

 

<version>${clover.version}</version>  ---这个将会打包后deploy中央私库后最终的version
<finalName>clover-core-${clover.version}</finalName> --这个就是子工程clover-core打包最终名字

 

 

我们执行打包后:

私库

当我们打war包的时候,我们也可以指定依赖模块的版本号:

我们这里面使用的 profile配置的环境version,但让你想自己改成别的版本,你打包后就可以看到某个依赖的jar包就是你指定的版本

我们把clover-core的版本改成dev-1.0 

再把clover-core的pom.xml 

打包后 我们看下war包中:

但我看下clover-core子工程下的target:

原来是这样的

maven用的时间倒是很长,但大多时间都是一次配置后,再没有修改后,然后开发项目,但有些细节 最终没有研究那么明白

文章写的有点水,希望对您受用,谢谢

0
5
分享到:
评论
3 楼 erpaoshouling 2015-01-16  
用的autoconfig
2 楼 Stark_Summer 2015-01-16  
您这种方式也好用 但当时可能是我人品问题,就是没生效
1 楼 liuyinsongzi 2015-01-16  
pom.xml

<profiles>
<profile>
<id>dev</id>
<properties>
<deploy.env>dev</deploy.env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<deploy.env>test</deploy.env>
</properties>
</profile>
<profile>
<id>idc</id>
<properties>
<deploy.env>idc</deploy.env>
</properties>
</profile>
<profile>
<id>idcbak</id>
<properties>
<deploy.env>idcbak</deploy.env>
</properties>
</profile>
</profiles>
<build>
<finalName>${war.file.name}</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.24</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<!-- <packagingExcludes> com/jala/sms/test/*.java </packagingExcludes> -->
<!-- http://maven.apache.org/plugins/maven-war-plugin/ -->
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
</configuration>
</plugin>
</plugins>
<!-- 指定 filter <filters> <filter>src/main/filters/sys-${deploy.env}.properties</filter>
</filters> -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources-${deploy.env}</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>

相关推荐

    maven 过滤文件夹打包

    Maven的`maven-resources-plugin`插件提供了资源过滤功能,它允许我们在打包过程中根据构建目标(例如`package`命令)动态替换或选择性地包含文件。以下是如何配置Maven pom.xml文件来实现这一目标: ```xml ...

    sprintboot maven 打包分离lib jar 资源文件 properties xml yml

    sprintboot maven 打包分离lib jar 资源文件 properties xml yml 详细信息查看我的博客 https://mp.csdn.net/postedit/80274087 java -jar -cp 启动

    ResourceBundle与Properties读取maven中resources目录下的资源文件

    ### ResourceBundle与Properties读取Maven中Resources目录下的资源文件 #### 一、概述 在Java开发过程中,我们经常需要读取资源文件中的配置信息。在Maven项目中,`src/main/resources`目录下通常存放了各种配置...

    sprintboot maven 打包分享lib 资源文件properties xml yml

    在Spring Boot项目中,使用Maven进行打包是一个常见的任务,特别是在开发过程中,我们需要构建可部署的jar或war文件。这个过程不仅包括编译Java代码,还包括处理资源文件,如.properties, .xml, 和 .yml文件,这些...

    maven打包 maven打jar包详细步骤

    3. `mvn install`:此命令在`package`之后,将`target`目录下的打包文件安装到本地Maven仓库。这使得其他本地项目可以通过依赖管理直接引用这个项目,而无需再次编译。 在`maven-war-plugin`和`maven-install-...

    springboot+maven打包demo【将依赖与配置文件打包到jar包外部】

    在本文中,我们将深入探讨如何使用Spring Boot和Maven来构建一个项目,使得依赖和配置文件被打包到jar包外部,以实现更加灵活的项目管理。这个方法对于那些需要根据不同环境进行定制配置或者频繁更新配置的应用来说...

    maven生成可执行exe文件

    首先,你需要在你的系统上安装`launch4j`,然后在`pom.xml`中配置`maven-assembly-plugin`或`maven-shade-plugin`来生成单一的jar文件,最后配置`exec-maven-plugin`来调用`launch4j`。 添加`maven-assembly-...

    Maven自动升级版本号并打包上传的脚本

    使用`maven-deploy-plugin`,我们可以将打包后的文件上传到远程仓库。通常,这需要配置`settings.xml`中的服务器ID、用户名和密码。命令`mvn deploy`会将文件上传到指定的远程仓库。 5. 自动化脚本: `Version&...

    maven3.5.4打包文件

    3. **编辑 POM.xml**:根据项目需求修改 POM 文件,添加依赖、插件和构建配置。 4. **执行构建**:通过命令如 `mvn clean compile` 或 `mvn package` 执行构建过程。 5. **调试与优化**:使用 `-X` 或 `-e` 参数查看...

    maven 3 jar 运行文件打包

    【标题】:“Maven 3 Jar 运行文件打包” 在Java开发中,Maven是一个广泛应用的构建工具,它能够帮助我们管理项目依赖、构建工件(如JAR文件)以及自动化项目的构建过程。当我们想要将Java应用程序打包成可执行的...

    Maven打包,指定classes路径

    在Java开发中,Maven是一个不可或缺的构建工具,它能够帮助开发者管理项目依赖、构建工件(如JAR或WAR包)以及执行各种生命周期阶段。当我们处理Web应用程序时,通常会将编译后的类文件(classes)打包到特定的目录...

    Maven发布Jar包中文乱码解决方法

    Maven发布Jar包中文乱码解决方法 Maven 是一个基于项目对象模型(Project Object...通过在 pom.xml 文件中添加配置、在 Maven 命令中添加参数、在资源文件中添加配置等方式,可以解决 Maven 发布 Jar 包中文乱码问题。

    maven+bat打包

    "maven+bat打包"是指使用Apache Maven,一个流行的Java项目管理工具,结合批处理脚本(BAT)来自动化项目的打包过程。这种方式可以极大地提高开发效率,确保每次构建的一致性和可重复性。下面将详细介绍这个过程及其...

    使用maven profile指定配置文件打包适用多环境的方法

    使用maven profile指定配置文件打包适用多环境的方法 Maven Profile是Maven提供的一种配置管理机制,允许开发者在不同的环境中使用不同的配置文件。通过使用Maven Profile,可以轻松地在开发、测试、预演和生产等...

    maven pom.xml 动态读取变量值插件

    该jar包功能,可以在一个properties文件里面定义jdbc.url=${url},在另一个properties文件定义具体的值,通过该jar可以获取到哪个具体的值。下载之后,自行安装到本地maven仓库,安装命令参考我另一篇博文。具体pom....

    maven 占位符打包

    使用Maven的占位符,我们可以在一个通用的POM.xml中定义这些参数,并在构建时根据环境动态替换。 Maven的占位符主要由`&lt;properties&gt;`标签定义,例如: ```xml ... &lt;properties&gt; &lt;db.url&gt;dev-db-url ...

    maven打包使用yui压缩css和js文件

    在Maven中实现这个功能,我们需要借助maven-assembly-plugin或者maven-war-plugin,但更常见的是使用maven-resources-plugin和maven-compiler-plugin配合yuicompressor-maven-plugin。以下是一个详细的步骤说明: 1...

    maven多环境配置打包

    在执行打包命令(如`mvn package`)时,Maven会根据激活的profile应用相应的配置,生成对应的war或jar文件。这样,每个环境的部署包都会包含正确的配置信息。 6. 使用技巧: - 尽量将环境相关的配置信息(如...

    maven多模块打包pom文件

    5. **打包与部署**:通过执行`mvn clean install`或`mvn clean package`命令,Maven会递归地构建所有子模块,并将最终的JAR或WAR文件放置在指定的目标目录下。如果需要部署到远程仓库,可以使用`mvn deploy`命令。 ...

    Java+IDEA+maven混淆打包

    在`pom.xml`文件中,我们需要添加`maven-jar-plugin`插件来打包Java项目。以下是一个基本的配置示例: ```xml &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin &lt;version&gt;3.2.0 ...

Global site tag (gtag.js) - Google Analytics