根据阶段,使用maven包含/排除jar中的文件

时间:2013-11-11 18:08:48

标签: java maven jar

我有一个

  

的src /主/资源/的log4j.xml

文件,当我执行mvn assembly:assembly时,我希望将其包含在jar中,但在执行mvn package时将其排除在外。我怎么能这样做?

我已经在这里阅读了几个maven文档和问题,但到目前为止我还是无法做到这一点。我尝试了很多方法,但都失败了。

基本上,我在我的pom的<build><plugins>部分:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

然后在<build>部分

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>src/main/resources/log4j.xml</exclude>
        </excludes>
    </resource>
</resources>

但我随处可见log4j.xml。

2 个答案:

答案 0 :(得分:2)

您放置在<exclude><include>元素中的任何内容都被视为相对于指定的<directory>。所以,他们现在就拥有它,Maven将尝试排除可能不存在的资源${basedir}/src/main/resources/src/main/resources/log4j.xml。尝试像这样设置资源元素:

<resources>
  <resource>
      <directory>src/main/resources</directory>
      <excludes>
          <exclude>**/log4j.xml</exclude>
      </excludes>
  </resource>

作为旁注,assembly:assembly目标已弃用。根据{{​​3}},请改为使用single目标。

答案 1 :(得分:0)

org.apache.maven.plugins可以在打包阶段对包含或排除文件进行很好的简单控制!

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>3.0.2</version>
   <configuration>
      <excludes>
         <exclude>**/password.properties</exclude>
      </excludes>
   </configuration>
</plugin>