Maven可以向用户询问值并将其输入文件吗?

时间:2012-09-13 19:07:33

标签: maven configuration

我有很多值必须更改的配置文件。我想知道是否有人运行“package”命令是否可以请求一些值并将它们插入我的项目文件中?

4 个答案:

答案 0 :(得分:3)

Better Approach将根据环境具有不同的属性/配置文件。

  1. PROD
  2. 开发
  3. 将两组值保存在两个不同的文件中。有时指定文件名。

答案 1 :(得分:1)

对于90%的构建任务,都有Maven。对于其他一切,有maven-antrun-plugin

我建议创建一个自定义ant脚本(可以嵌入到pom.xml中),提示用户输入并使用Ant Input Task

写出配置文件

答案 2 :(得分:0)

您可以使用maven -P选择maven个人资料,然后选择属性文件。

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <resource.prefix>dev</resource.prefix>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <resource.prefix>prod</resource.prefix>
        </properties>
    </profile>
</profiles>

现在以${resource.prefix}_config.properties的身份访问您的资源文件。因此,当配置文件生成时,将采用资源文件prod_config.properties

答案 3 :(得分:0)

除非您执行noahz建议的某些蚂蚁内容,否则无法真正让maven提示输入。

如果您不想使用“个人档案”,可以执行的操作是使用您的pom文件中的属性。

示例:

<project>
    <groupId>abc</groupId>
    <artifactId>def</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <myProperty>someValue</myProperty>
    </properties>

    <build>
        <plugins>
            <plugin>
                ...
                <configuration>
                    <outputDir>${myProperty}</outputDir>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

您可以在pom文件中的任何位置使用该属性,甚至可以在过滤资源时使用该属性。

默认情况下,该属性可能为空,然后从命令行设置新值:

mvn package -DmyProperty=anotherValue

anotherValue将传播到pom中使用的任何地方。


您可以阅读有关Maven资源过滤here的信息。

如果您将文件放在src/main/resources中,则可以使用上述属性进行过滤:

src/main/resources/important-stuff.properties

some.nice.property = Nice!
some.variable.property = ${myProperty}

这应该添加到pom:

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

过滤的important-stuff.properties最终会出现在target/classes和jar中,看起来像这样:

some.nice.property = Nice!
some.variable.property = anotherValue

资源过滤非常方便。