在maven上如何忽略资源文件中的表达式(EL)? $ {}的user.home

时间:2014-09-25 00:29:19

标签: java maven

我有这个pom.xml:

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

Inside&#34; src / main / resources /&#34;,我有这个文件log4j.xml。

...
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
  <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
  <param name="File" value="${user.home}/myApp/myLog.log"/>
  <param name="Append" value="true"/>
  <param name="Threshold" value="INFO"/>
  <param name="DatePattern" value="_yyyy-MM'.log'"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p [%c:%L] %m%n"/>
  </layout>
</appender>
...

我的问题是当我进行$ mvn clean install时,$ {user.home}被翻译为

<param name="File" value="C:\\Users\\myUser/myApp/myLog.log"/>

那么我怎么能忽略这种情况$ {user.home}使用相同的$ {user.home}保留在目标目录中,因为log4j需要知道运行我的app的任何机器的用户目录。

注意:我还想澄清一下,我有更多必须过滤的资源文件。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您需要在pom.xml中添加<excludes>标记,以便在过滤为true时不复制此文件,并添加第二个资源块以仅复制此文件而不进行过滤

<project>
...
<build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>log4j.xml</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>log4j.xml</exclude>
            </includes>
        </resource>
    </resources>
</build>
</project>

答案 1 :(得分:1)

我找到了这个解决方案,在maven-resources-plugin上使用escapeString,这里是代码片段:

<project>
...
<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <escapeString>\</escapeString>
            </configuration>
        </plugin>
</plugins>
...
<build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>
</project>

并且在log4j配置文件中,需要在属性之前添加“\”。

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
  <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
  <param name="File" value="\${user.home}/myApp/myLog.log"/>
  <param name="Append" value="true"/>
  <param name="Threshold" value="INFO"/>
  <param name="DatePattern" value="_yyyy-MM'.log'"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p [%c:%L] %m%n"/>
  </layout>
</appender>

请参阅文档:Escape Filtering

我希望有人觉得它很有用。