Maven Sync支持多种配置
如何让Maven Sync的时候,支持切换不同配置?
例如在开发的时候,可能使用不同的Repo来Sync project,因为有的企业开发当中,使用了不同的Maven服务器,例如DEV下的Maven库可能比较齐全,但是生产环境下的Maven库是有限的,避免版权或者安全漏洞而少了一些包,所以我们可能需要在DEV,PRD等环境下切换Maven库,下面就是简单的方法:
修改 maven 配置文件,例如 %userprofile%\.m2\settings.xml ,在 profiles 部分,增加一些新的Maven库即可,例如:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>www.abc.com</host>
<port>8080</port>
<nonProxyHosts>local.net|server.com|dev.server.com</nonProxyHosts>
</proxy>
</proxies>
<servers>
<server>
<username>xxx</username>
<password>---</password>
<id>central</id>
</server>
<server>
<username>xxx</username>
<password>---</password>
<id>snapshots</id>
</server>
</servers>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>maven-dev</name>
<url>https://dev.server.com:1234/artifactory/maven-dev</url>
</repository>
<repository>
<snapshots/>
<id>snapshots</id>
<name>maven-dev</name>
<url>https://dev.server.com:1234/artifactory/maven-dev</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>maven-dev</name>
<url>https://www.abc.com:55743/artifactory/maven-dev</url>
</pluginRepository>
<pluginRepository>
<snapshots/>
<id>snapshots</id>
<name>maven-dev</name>
<url>https://www.abc.com/artifactory/maven-dev</url>
</pluginRepository>
</pluginRepositories>
<id>maven-dev</id>
</profile>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>maven-prd</name>
<url>https://prd.server.com:55743/artifactory/maven-prd</url>
</repository>
<repository>
<snapshots/>
<id>snapshots</id>
<name>maven-prd</name>
<url>https://prd.server.com:55743/artifactory/maven-prd</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>maven-prd</name>
<url>https://artifactrepo.server:55743/artifactory/maven-prd</url>
</pluginRepository>
<pluginRepository>
<snapshots/>
<id>snapshots</id>
<name>maven-prd</name>
<url>https://artifactrepo.server:55743/artifactory/maven-prd</url>
</pluginRepository>
</pluginRepositories>
<id>maven-prd</id>
</profile>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>act_maven_dev</name>
<url>https://act.server.com:55743/artifactory/act_maven_dev</url>
</repository>
<repository>
<snapshots/>
<id>snapshots</id>
<name>act_maven_dev</name>
<url>https://act.server.com:55743/artifactory/act_maven_dev</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>act_maven_dev</name>
<url>https://act.server.com:55743/artifactory/act_maven_dev</url>
</pluginRepository>
<pluginRepository>
<snapshots/>
<id>snapshots</id>
<name>act_maven_dev</name>
<url>https://act.server.com:55743/artifactory/act_maven_dev</url>
</pluginRepository>
</pluginRepositories>
<id>act_maven_dev</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>act-maven-dev</activeProfile>
</activeProfiles>
</settings>
此后就可以在Idea的Maven窗口里面随意切换配置了。
打包时支持多种配置
Java Maven项目中,开发调测的时候和部署的时候,环境一般是不一样的。如果需要区分不同项目下的application.properties,logback.xml等情况,网络上的方法一般是建立几个目录,分别存放 properties 文件,然后在代码里面,用环境变量去替代对应的环境目录。这种方法本质上是没错,但是需要修改代码,实际上比较恶心,属于侵入式的配置,理论上,我们只要修改 pom.xml 就可以做到的,完全不需要和代码有任何结合。
如果打包jar包需要支持PRD, DEV, TEST等各种环境,下面就是最简单优美的方法,只需要涉及到 pom.xml,完全不需要改动任何代码。
1. 首先,在resource目录下,建立 dev, test, prod 等几个目录,并在上述目录下,放置对应的application.properties,logback.xml等配置文件
2. 修改pom.xml。 build/resources 下面增加配置:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>chromedriver.exe</exclude>
<exclude>dev/*</exclude>
<exclude>prod/*</exclude>
<exclude>test/*</exclude>
</excludes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources/${profiles.activation}</directory>
<targetPath>${project.build.outputDirectory}</targetPath>
<filtering>false</filtering>
</resource>
</resources>
3. 在pom.xml 下面,/project 节点下,粘贴一下代码:
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.activation>dev</profiles.activation>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.activation>test</profiles.activation>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.activation>prod</profiles.activation>
</properties>
</profile>
</profiles>
此后,在Idea Maven 窗口或者命令行中,切换和指定 Profile,打包的时候就时对应的环境配置了。