可通过这种方式实现,不把一些敏感信息打入最终jar包,从而不暴露给最终用户。
项目yml文件相关部分:
clientId:
registerEnv: dev
pom.xml中相关部分如下。使用了groovy-maven-plugin 插件,并使用了SnakeYAML来解析yml文件:
xml
<build>
。。。
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.1.1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
import org.yaml.snakeyaml.Yaml
import java.io.FileInputStream
def targetDir = new File("target")
if (!targetDir.exists()) {
targetDir.mkdirs()
}
// 读取 application.yml中的值:
def yamlFile = new File(project.basedir, "src/main/resources/application.yml")
def yaml = new Yaml()
def config = yaml.load(new FileInputStream(yamlFile))
def env = config.clientId?.registerEnv
def urlMap = [ // 根据环境选择对应的URL(来自settings.xml)
"dev" : "${client.dev.url}",
"prod": "${client.prod.url}"
]
def registerUrl = urlMap[env]
def response = new URL(registerUrl).text
def file = new File(targetDir, "license.txt")
file.write(response.trim())
</source>
</configuration>
</execution>
</executions>
<!-- SnakeYAML 依赖(用于解析 YAML) -->
<dependencies>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</plugin>
。。。
本地Maven的settings.xml相关部分如下,使用了Maven Profiles:
xml
<settings>
。。。
<profiles>
<profile>
<id>hanfu-register-client-url</id>
<properties>
<client.dev.url>http://127.0.0.1:8083/hanfu/registerClient</client.dev.url>
<client.prod.url>http://xxx.xxx.xxx.xxx:25088/hanfu/registerClient</client.prod.url>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>hanfu-register-client-url</activeProfile>
</activeProfiles>
</settings>
可见Maven Profiles不仅可以配置在软件项目的pom.xml中,如我博:根据OS自动加载不同的native库和本地jar包 ,也可以配置在maven的settings.xml文件中。