【问题标题】:Eclipse + maven : profile ignoredEclipse + maven:配置文件被忽略
【发布时间】:2015-03-04 17:44:25
【问题描述】:

这是我的 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.heliosophiclabs</groupId>
<artifactId>artifactId</artifactId>
<version>0.0.1-SNAPSHOT</version>

<profiles>
    <profile>
        <id>local</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <serverAddr>localhost</serverAddr>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <serverAddr>heliosophiclabs.com</serverAddr>
        </properties>
    </profile>
</profiles>

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

我在 src/main/resources 中有一个 config.properties 文件,如下所示:

serverIp=${serverAddr}

然后我做:

mvn clean resources:resources -Pprod

请注意,此处将配置文件指定为“prod”,然而,无论我如何坚持,上述命令行之后的 config.properties 文件如下所示:

serverIp=localhost

应该是这样的:

serverIp=heliosophiclabs.com

如果我在这个命令行中指定了一个不存在的配置文件,那么 maven 会给我一个错误,所以它肯定在做某事。

请...我在这里做错了什么??

编辑:

根据要求,“mvn -X -Pprod install”的输出可用here,因为它太大了,无法在此处发布。

这正是我所看到的:

C:\Users\Marc\workspace_mars_2\entourage>mvn -X -Pprod install > mvn.out
C:\Users\Marc\workspace_mars_2\entourage>more target\classes\config.properties
serverAddr=localhost

在entourage-0.0.1-SNAPSHOT.jar中,config.properties在根目录,内容同上(即localhost)。

我不是在编造这个!

【问题讨论】:

  • 你的 config.properties 在 src/main/resources 里面吗?您是在告诉 Maven,您的资源在哪里。另外,您告诉 maven 它应该过滤您的资源 (filtering=true),也就是说,资源中具有占位符 (${some.property}) 的任何文件都应该使用过滤器提供的值进行“过滤”(您在 pom)、pom 属性或命令行属性的过滤器部分中声明您的过滤器
  • 是的,config.properties 在 src/main/resources 中,但现在我很困惑。你说我应该只在 pom 中定义 env 属性(比如 heliosophiclabs.com/~mad/pom.xml.txt )......现在你说我也应该定义 serverAddr ?我假设所有这些都是解决我一开始的方式莫名其妙的问题的解决方法,这确实应该可以正常工作。我是对的,还是我以前做错了?
  • 不! serverAddr 应该在过滤器中而不是在 pom 中(在 local.properties 中放置 serverAddr=localhost,在 prod.properties 中放置 serverAddr=heliosophiclabs.com)。首先你做得很好,这个解决方法只是查看配置文件是否被激活,如果没有,它应该抛出错误,因为 maven 找不到 ${env}.properties 文件来获取过滤器值(或本例中的值:serverAddr)。当您有多个要替换的值(以保持 pom 清洁)时,过滤器会更好,在您的情况下,使用 pom 中的属性很好,但仅用于测试......
  • 不在 pom 中?那么,我需要一些其他文件吗?我正在阅读有关过滤的 Maven 文档,但我看到的只是我尝试的初始方式(失败了)。无论如何,根据 -X 调试输出,它看起来好像配置文件已正确激活。我做mvn -X process-resources -Pprod &gt; mvn.out ...输出在这里:heliosophiclabs.com/~mad/mvn.out 如你所见,[DEBUG] properties used { ... env=prod[DEBUG] (f) buildFilters = [C:\Users\Marc\workspace_mars_2\entourage\filters\prod.properties]
  • 您可以使用过滤器,而不是使用配置文件中的属性,并将这些属性作为key=value 放在那里。在这种情况下,我们需要两个过滤器,一个用于本地,一个用于生产,它们每个都只有一个属性(serverAddr),但具有不同的值。您是否将serverAddr=localhost 放入local.properties 并将serverAddr=heliosophiclabs.com 放入prod.properties?对不起我的英语不好?

标签: maven filtering profile


【解决方案1】:

经过多次讨论,最终发现问题出在使用“使用本机挂钩或轮询刷新”选项(首选项>常规>工作区>使用本机挂钩刷新)。取消选中此选项可解决问题。

向 Eclipse 基金会提交的错误报告。见https://bugs.eclipse.org/bugs/show_bug.cgi?id=462027

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2016-06-25
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多