【问题标题】:maven-ear-plugin project property lookup failsmaven-ear-plugin 项目属性查找失败
【发布时间】:2014-05-19 09:30:22
【问题描述】:

我创建了带有过滤器的简单耳朵项目。我想为每个环境使用不同的设置,这些设置应该以 env-entries 的形式传递给生成的 application.xml 文件。 ear包的生成是用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 元素(即 &lt;applicationName&gt;,不幸的是,当我将它放在 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 并在用户 @skegg99 建议的创建文件后过滤 application.xml 文件.由于我无法替换此文件,我不得不将其复制到 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下载。

【问题讨论】:

  • 您可能想尝试使用 maven-resources-plugin 在 application.xml 创建后对其进行过滤
  • 据我所知maven_resources-plugin 适用于复制文件,但不适用于替换它们。尽管如此,我还是尝试这样做 - 创建新文件有效,但是当我提供相同的目录时,它会删除文件!
  • Maven-resources-plugin 旨在做两件事。首先将文件从一个位置复制到另一个位置并在复制过程中过滤这些文件。展示你的例子。
  • @khmarbaise 我已经准备了一个示例配置,我打算在其中过滤文件,然后在同一路径中替换它。如前所述,它会生成空文件。我在问题中提供的解决方案之间的唯一区别在于 &lt;outputDirectory&gt; 元素值。这是示例项目testWrong

标签: java maven maven-ear-plugin


【解决方案1】:

以您当前的设置,这很可能是不可能的。

我只是简单地查看了the code,它指出环境条目是通过PlexusConfiguration 加载的。

如果不深入研究该代码,我看不出这部分处理条目比“读取 XML,放入列表”更特殊。

【讨论】:

  • 因此,正如您所说,由于读取 env-entries 的方式,maven 项目属性没有被解析。我现在不确定这是一个错误还是按预期工作。
  • @TrueCurry 这不是错误,而是缺少的功能。我建议你在邮件列表中询问这个插件。如有疑问,请提交错误报告,这对于任何一种错误都足够接近。 (正如你所期望的那样)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多