Maven构建灵活配置文件
Posted 下士闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven构建灵活配置文件相关的知识,希望对你有一定的参考价值。
本文解决以下问题:
- Maven下面启动Main函数;
- 配置JDK版本
- 如何配置文件,在开发部署测试各个不同版本间无缝切换配置文件;
启动Main函数
Maven默认是不支持Main函数程序,需要在pom文件中添加如下插件(plugin)才可以。
????<build>
????????<plugins>
????????????<plugin>
????????????????<groupId>org.apache.maven.plugins</groupId>
????????????????<artifactId>maven-shade-plugin</artifactId>
????????????????<version>1.2.1</version>
????????????????<executions>
????????????????????<execution>
????????????????????????<phase>package</phase>
????????????????????????<goals>
????????????????????????????<goal>shade</goal>
????????????????????????</goals>
????????????????????????<configuration>
????????????????????????????<transformers>
????????????????????????????????<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
????????????????????????????????????<mainClass>profileFlex.profileFlex.App</mainClass>
????????????????????????????????</transformer>
????????????????????????????</transformers>
????????????????????????</configuration>
????????????????????</execution>
????????????????</executions>
????????????</plugin>
????????</plugins>
????</build>
配置JDK版本
可以在POM以及Setting文件两个地方进行配置,但是其实这是一个全局性的配置,一般都是在settings文件中进行设置:
Settings配置????
在Profiles下面添加如下的profile即可引入jdk-1.7(我是用的LUNA版本,默认是JDK1.5)
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
????????<jdk>1.7</jdk>
</activation>
?
<properties>
????????<maven.compiler.source>1.7</maven.compiler.source>
????????<maven.compiler.target>1.7</maven.compiler.target>
????????<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
POM配置????
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
?
配置Profile,动态发布配置文件
原理是配置文件使用maven属性进行占位,然后在pom文件中定义多个profile文件,每隔profile文件中定义属性(占位符)值,可以定义开发环境,测试环境以及部署环境的值。在执行maven的时候,maven将会根据指定的参数来动态填充配置文件信息。
定义配置文件
在src/main/resources下面添加配置文件config.properites,内容为:
name=${pf.name}
配置资源文件过滤器
Maven属性只有在maven才能进行填充,所以需要在resources阶段对资源文件进行处理,这是使用到了过滤器配置:
????<build>
????????<resources>
????????????<resource>
????????????????<directory>${project.basedir}/src/main/resources</directory>
????????????????<filtering>true</filtering>
????????????</resource>
????????</resources>
????</build>
这是通知Maven,在处理资源文件阶段,需要对resources文件夹下面的文件进行处理,使用maven属性值进行填充;
定义Profile文件
需要定义Maven属性值,这样才能够在编译阶段,根据指定的profile节点名称进行动态填充配置文件。
????<profiles>
????????<profile>
????????????<id>test</id>
????????????<properties>
????????????????<pf.name>Jim</pf.name>
????????????</properties>
????????</profile>
????????<profile>
????????????<id>dev</id>
????????????<properties>
????????????????<pf.name>Jerry</pf.name>
????????????</properties>
????????</profile>
????</profiles>
测试程序
最后我们写一段小的测试程序
测试代码
public class App {
????public static void main(String[] args) {
????????Properties p = new Properties();
????????try {
????????????InputStream fis = App.class.getClassLoader().getResourceAsStream("config.properites");
????????????p.load(fis);
????????????String name = p.getProperty("name");
????????????System.out.println("The name is: " + name);
????????} catch (Exception e) {
????????????e.printStackTrace();
????????}
?
????}
}
执行指令
右键pom文件,run as maven build…,在goals里面敲入:
clean compile -Pdev exec:java -Dexec.mainClass="profileFlex.profileFlex.App"
-Pdev就是指定profile参数为dev;还可以使用-Ptest
-Dexec就是执行Java代码,mainClass指定入口的Main所在的类
?
可以看到指定不同的-P参数,将会打印出不同的内容。
?
?
?
?
?
?
以上是关于Maven构建灵活配置文件的主要内容,如果未能解决你的问题,请参考以下文章
spring-boot 使用 main函数 无法启动的问题完美 解决方案。