如何在maven构建时注入一个属性,该属性稍后在java项目的运行时可以访问?
当java项目由maven构建时,我试图通过命令行注入属性,如如何在maven构建时注入一个属性,该属性稍后在java项目的运行时可以访问?,java,maven,system-properties,Java,Maven,System Properties,当java项目由maven构建时,我试图通过命令行注入属性,如 mvn clean install -DMYPROP=myProperty 我认为这足以让maven将其转换为一个系统属性,然后可以通过System.getProperty(“MYPROP”)在java中访问该属性。但这并不奏效 所以我做了更多的研究,这里的一篇帖子指向Maven属性,所以我在pom.xml中尝试了以下内容: <properties> <MY.VARIABLE>${MYPROP}
mvn clean install -DMYPROP=myProperty
我认为这足以让maven将其转换为一个系统属性,然后可以通过System.getProperty(“MYPROP”)
在java中访问该属性。但这并不奏效
所以我做了更多的研究,这里的一篇帖子指向Maven属性,所以我在pom.xml中尝试了以下内容:
<properties>
<MY.VARIABLE>${MYPROP}</MY.VARIABLE>
<MY.ENV.VARIABLE>${env.MYPROP}</MY.ENV.VARIABLE>
</properties>
我还尝试了使用基于的properties maven插件。该属性也是空的
有什么建议吗?据我所知,无法为您构建的Java应用程序设置系统属性
如果要保存信息以供以后在Java应用程序中使用,可以将属性文件用作打包到jar中的资源。据我所知,无法为您构建的Java应用程序设置系统属性 如果要保存信息以供以后在Java应用程序中使用,可以将属性文件用作打包到jar中的资源。我用于将Maven属性写入.properties文件 在POM中,指定包含属性文件的目录并启用筛选:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
src/main/resources
符合事实的
然后在属性文件(如:src/main/resources/application.properties)中,引用一个属性:
my.property=${my.maven.property}
然后,在构建项目时,您的属性将写入target/dir中的属性文件。然后在应用程序中,在运行时加载属性文件并访问该值。我用于将Maven属性写入.properties文件
在POM中,指定包含属性文件的目录并启用筛选:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
src/main/resources
符合事实的
然后在属性文件(如:src/main/resources/application.properties)中,引用一个属性:
my.property=${my.maven.property}
然后,在构建项目时,您的属性将写入target/dir中的属性文件。然后在应用程序中,在运行时加载属性文件并访问该值。您可以将属性保存到构建工件内的文件中 例如,文件
src/main/resources/myProperties.properties
mavenProperty=${MYPROP}
您需要在pom.xml
中调整过滤:
...
src/main/resources
符合事实的
然后,当您使用-DMYPROP=some值运行maven时,myProperties.properties将包含:
mavenProperty=some-value
因此,通过加载属性资源(而不是使用System.getProperty(..)
),您将能够在运行时获得一些值:
公共类应用程序{
公共静态void main(字符串[]args)引发IOException{
属性=新属性();
load(App.class.getResourceAsStream(“/myProperties.properties”);
获取(“mavenProperty”);
}
}
您可以将属性保存到构建工件内的文件中
例如,文件src/main/resources/myProperties.properties
mavenProperty=${MYPROP}
您需要在pom.xml
中调整过滤:
...
src/main/resources
符合事实的
然后,当您使用-DMYPROP=some值运行maven时,myProperties.properties将包含:
mavenProperty=some-value
因此,通过加载属性资源(而不是使用System.getProperty(..)
),您将能够在运行时获得一些值:
公共类应用程序{
公共静态void main(字符串[]args)引发IOException{
属性=新属性();
load(App.class.getResourceAsStream(“/myProperties.properties”);
获取(“mavenProperty”);
}
}
实现目标有几种方法。下面是其中之一
无论您决定做什么,使用properties
文件存储您的属性都是一个很好的做法
使用maven
可以使用配置文件并为不同的配置文件创建不同的属性
文件。要使maven将属性值传递给属性文件,请使用资源筛选。示例如下:
<project ... >
.
.
.
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<my.prop>dev_value</my.prop>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<my.prop>prod_value</my.prop>
</properties>
</profile>
</profiles>
.
.
.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
这将最终替换my.prop
的值,如果没有找到,将使用默认值default\u值
希望这对你有所帮助。有几种方法可以实现你的目标。下面是其中之一
无论您决定做什么,使用properties
文件存储您的属性都是一个很好的做法
使用maven
可以使用配置文件并为不同的配置文件创建不同的属性
文件。要使maven将属性值传递给属性文件,请使用资源筛选。示例如下:
<project ... >
.
.
.
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<my.prop>dev_value</my.prop>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<my.prop>prod_value</my.prop>
</properties>
</profile>
</profiles>
.
.
.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
这将最终替换my.prop的值,如果没有找到,则d