在 Maven 配置文件中使用属性标签

Posted

技术标签:

【中文标题】在 Maven 配置文件中使用属性标签【英文标题】:Using the properties tag within maven profiles 【发布时间】:2012-08-17 14:51:14 【问题描述】:

我指的是“Maven: The Complete Reference”,尤其是关于配置文件的部分,该部分记录了<profile... 标记中<properties... 标记的使用:see here

 <profile>
            <id>development</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <property>
                    <name>environment.type</name>
                    <value>dev</value>
                </property>
            </activation>
            <properties>
                <database.driverClassName>com.mysql.jdbc.Driver</database.driverClassName>
                <database.url>
                    jdbc:mysql://localhost:3306/app_dev
                </database.url>
                <database.user>development_user</database.user>
                <database.password>development_password</database.password>
            </properties>
        </profile>

我不确定的是当mvn install -Denvironment.type=dev 命令运行时会发生什么:

这会创建一个.properties 文件吗? 如果在 dev 中测试应用程序时,tomcat(例如)将如何以及在何处读取各个属性?

【问题讨论】:

刚刚尝试通过 maven 和 spring 来跟踪这里的链条,这正是我需要的问题和答案!不错! 【参考方案1】:

这会创建一个 .properties 文件吗?

不,不会。这将设置 maven 使用的属性。也就是说,mvn install -Denvironment.type=development maven 将使用值 'development_user' 作为变量 'database.user'(您可以在 poms 和过滤资源中用作 $database.user)。

如果不是,当应用程序在 dev 中测试时,tomcat(例如)将如何以及在哪里读取各个属性?

事情是告诉 maven 根据配置文件(properties.files)过滤(和修改)您想要自定义的资源。

所以,首先你得说 maven 来过滤资源:

<build>
    <resources>
        <resource>
             <directory>src/main/resources</directory>
             <filtering>true</filtering>
        </resource>
    </resources> 
</build>

然后修改您的属性文件以使用 Maven 变量。例如,您的 db 属性文件如下所示:

database.driverClassName=$database.driverClassName
database.url=$database.url
#...

【讨论】:

我发现 the docs 在阅读此答案后很有帮助 - 似乎“过滤”基本上意味着 maven 会通过并用它在构建时的值替换 $somename 在任何文件中。您可以在构建输出中看到这一点。很好的答案 - 真的填补了我的空白。

以上是关于在 Maven 配置文件中使用属性标签的主要内容,如果未能解决你的问题,请参考以下文章

在 application.conf 中使用 Maven 配置文件属性

Maven:配置文件激活取决于 localRepository 属性?

6.maven的pom.xml配置文件中常用的配置标签解析

模拟Spring容器的getBean方法(Maven工程)

maven中使用freemarker,如何配置需要哪些配置文件

如何使用 Maven 配置文件设置弹簧活动配置文件