惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
G
Google Developers Blog
H
Help Net Security
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
D
Docker
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
博客园 - 司徒正美
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence

博客园 - 飘飘雪

Redis 的 Rehash 操作详解 Panic 与 Crash 的区别 vscode常用快捷键大全 网络流量单位 Core文件作用、设置及用法 linux批量执行工具omnitty安装及使用 linux 下误改了/etc/profile下的文件path路径导致整个系统用不了命令 python安装 linux less和more命令用法 Tair中对热key的内部处理 Tair中对大key的内部处理方式 redis的redis-benchmark用法 redis的memtier-benchmark用法 阿里巴巴的缓存类测试产品及有缺点 如何在class文件中使用pom中profile级别的 <properties> Guava 工具类之 Splitter的使用 什么是“黑天鹅”和“灰犀牛” java-sdk接口测试覆盖率统计实践 java应用接口自动化覆盖率统计实践
profiles下的properties与properties有什么区别
飘飘雪 · 2024-09-03 · via 博客园 - 飘飘雪

在Maven项目的pom.xml文件中,<properties>元素可以出现在两个地方:项目级别和profile级别。它们的作用和用法有所不同。

项目级别的 <properties>

项目级别的 <properties> 定义了一些全局的属性,这些属性在整个项目中都可以使用,无论是否激活某个profile。这些属性通常用于存储一些不变的值,例如项目的版本号、常用的依赖项版本等。

示例:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0.0</version>
    
    <properties>
        <java.version>1.8</java.version>
        <spring.version>5.3.10</spring.version>
    </properties>
    
    <!--...其他项目配置... -->
</project>

profile级别的 <properties>

profile级别的 <properties> 定义了一些特定于某个profile的属性。当你激活该profile时,这些属性将被使用;否则,它们不会生效。这些属性通常用于存储一些环境或条件特定的值,例如数据库连接字符串、服务器地址等。

示例:

<project>
    <!--...其他项目配置... -->
    
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            
            <properties>
                <db.url>jdbc:mysql://localhost:3306/mydb_dev</db.url>
                <server.address>http://localhost:8080</server.address>
            </properties>
        </profile>
        
        <profile>
            <id>prod</id>
            <properties>
                <db.url>jdbc:mysql://remote.db:3306/mydb_prod</db.url>
                <server.address>https://www.example.com</server.address>
            </properties>
        </profile>
    </profiles>
</project>
在上面的示例中,dev profile和prod profile都定义了不同的db.urlserver.address属性。当dev profile被激活时,db.url将被设置为jdbc:mysql://localhost:3306/mydb_dev,而当prod profile被激活时,db.url将被设置为jdbc:mysql://remote.db:3306/mydb_prod

在Maven中,profile级别的 <properties> 常用的激活方式有以下两种:

  1. 默认激活:你可以在profile中使用 <activation><activeByDefault>true</activeByDefault></activation> 来指定某个profile是默认激活的。这意味着如果没有明确地激活或禁用其他profile,则这个profile会被自动使用。

    示例:

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <db.url>jdbc:mysql://localhost:3306/mydb_dev</db.url>
            </properties>
        </profile>
    </profiles>
    
  2. 命令行激活:你可以在执行Maven命令时使用 -P 或 --activate-profiles 选项来激活一个或多个profile。

    示例:

    • 激活一个特定的profile:mvn package -Pdev
    • 激活多个profile:mvn package -Pdev,prod
    • 禁用一个特定的profile:mvn package -P!dev

使用 <properties> 的注意点

  1. 如果在项目级别和profile级别都定义了同一个属性,那么profile级别的属性会覆盖项目级别的属性。
  2. profile级别的属性只有在激活该profile时才会生效。
  3. 在Java代码中,你可以通过${property.name}的方式访问这些属性,例如: ${db.url} 或 ${server.address}

总的来说,项目级别的 <properties> 用于定义全局的、不变的属性,而profile级别的 <properties> 用于定义环境或条件特定的属性。这样可以使你的项目配置更加灵活和可维护。