2014-09-25 30 views
0

我有这样的pom.xml:

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

内部 “的src /主/资源/”,我有这个文件的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干净的安装,在$ {}的user.home被翻译成

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

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

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

感谢您的帮助提前。

回答

1

我发现这解决方案,对Maven的资源 - 插件使用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

我希望有人觉得它有用。

2

你需要一个<excludes>标记添加到您的pom.xml,使该文件不过滤时被复制真实,添加第二个资源区块只复制该文件,而无需过滤

<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> 
+0

感谢您的回答,但不包括将log4j.xml文件复制到我的目标目录。 – j2gl 2014-09-25 16:14:07

+1

对不起,我的错。你需要什么我有两个资源块,src/main/resources。在第一个块有过滤true和排除log4j.xml,并在第二个块有过滤false和包括log4j.xml – 2014-09-25 16:17:45

+0

我已经更新了我的答案 – 2014-09-25 16:53:37

相关问题