maven-ear-plugin项目属性查找失败

时间:2014-05-19 09:30:23

标签: java maven maven-ear-plugin

我用过滤器创建了简单的耳朵项目。我想为每个环境使用不同的设置,这些设置应以env-entries的形式传递给生成的 application.xml 文件。耳包的生成使用maven-ear-plugin完成,如下所示:

        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <generateApplicationXml>true</generateApplicationXml>
                <version>6</version>
                <envEntries>
                    <env-entry>
                        <env-entry-name>customProperty</env-entry-name>
                        <env-entry-type>java.lang.String</env-entry-type>
                        <env-entry-value>${custom.property}</env-entry-value>
                    </env-entry>
                </envEntries>
                <applicationName>${custom.property}</applicationName>
            </configuration>
        </plugin>

要做到这一点,我必须使用另一个插件properties-maven-plugin。它成功从文件中读取属性并将它们设置为maven项目属性,因此我可以使用 ${} 将它们插入到pom.xml文件中。它适用于大多数pom.xml元素(即 <applicationName> ,但遗憾的是,当我将它放在 env-entry 元素中时,它无法成功查找,我需要它。下面生成 application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
    <application-name>default property</application-name>
    <display-name>test</display-name>
    <env-entry>
        <env-entry-name>customProperty</env-entry-name>
        <env-entry-type>java.lang.String</env-entry-type>
        <env-entry-value>${custom.property}</env-entry-value>
    </env-entry>
</application>

这可能是一个应该在Maven Ear Plugin发布的错误,但我在那里没有帐户。如果有人想自己检查一下,我还附加了存档的maven项目:test.zip

修改

我已成功使用 maven-resource-plugin 解决此问题,并在用户创建后过滤 application.xml 文件建议 @ skegg99 。由于我无法替换此文件,因此我必须将其复制到META-INF目录。我知道,我看起来并不漂亮,但它现在解决了这个问题。以下是 maven-resource-plugin 的附加标记:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <outputDirectory>${basedir}/target/${project.artifactId}-${project.version}/META-INF</outputDirectory>
                <filters>
                    <filter>src/main/filters/${env}.properties</filter>
                </filters>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>

也在这里:

    <resources>
        <resource>
            <directory>${basedir}/target</directory>
            <filtering>true</filtering>
            <includes>
                <include>application.xml</include>
            </includes>
        </resource>
    </resources>

可以从here下载整个项目配置。

1 个答案:

答案 0 :(得分:1)

使用当前设置,您可能无法做到这一点。

我只是简要了解the code,其中指出env条目是通过PlexusConfiguration加载的。

如果不深入研究该代码,我也看不到这部分处理的条目比#34;读取XML,放入List&#34;。