使用maven-compiler-plugin排除包适用于一个包,但不适用于另一个包

时间:2014-08-15 08:15:19

标签: java maven maven-3 maven-compiler-plugin

我的项目具有以下包结构:

src/
  com.my.app.school.course
    -Course.java
    ...

  com.my.app.school.course.free
    -CourseFree.java  

我使用Maven构建项目,在我的pom.xml中,我定义了maven-compiler-plugin来测试排除包含所有java类的包。

我首先尝试按照排除com.my.app.school.course.free的方式:

<build>
   <plugins>
       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <excludes>
                    <exclude>**/com/my/app/school/course/free/*</exclude>
                </excludes>
             </configuration>
        </plugin>
    </plugins>
</build>

它有效!我的意思是在运行mvn clean install之后,target / classes /下的最终版本没有包com/my/app/school/course/free

然后,我尝试排除包com.my.app.school.course。我只需替换上面的<exclude>标记,其值为<exclude>**/com/my/app/school/course/*</exclude>。我认为它应该也可以,但它不会!在target / classes /下我看到所有包,不包括任何包。为什么呢?

我想要实现的是排除包com.my.app.school.course但保留pacakge com.my.app.school.course.free,如何实现这一目标?

======== update ========

我觉得可能是因为我试图排除的包中包含已在其他包中使用过的java类。我会核实我的猜测。

3 个答案:

答案 0 :(得分:7)

好的,我找到了排除不起作用的原因。

因为我试图排除的包下的一些java类已经在其他包中使用过了。似乎maven-compiler-plugin很容易检测到它。

答案 1 :(得分:0)

您注意到,问题在于您的 other 源代码取决于您排除的某些源代码:由于Maven将-sourcepath传递给javac,因此javac可以找到并编译这些“缺少”。

如果您希望在这种情况下构建失败,则可以为-sourcepath显式指定一个虚拟值:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <compilerArgs>
      <arg>-sourcepath</arg>
      <arg>doesnotexist</arg>
    </compilerArgs>
  </configuration>
</plugin>

请参见MCOMPILER-174this longer explanation of how javac handles -sourcepath and other arguments

答案 2 :(得分:0)

jarwar 插件 中配置排除似乎是一种不干扰JUnit 的好技术测试和编译:

maven-jar-plugin / exclude

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.2.0</version>
  <configuration>
    <excludes>
      <exclude>**/service/*</exclude>
    </excludes>
  </configuration>
</plugin>

maven-war-plugin / exclude

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <version>3.3.1</version>
  <configuration>
    <packagingExcludes>
      WEB-INF/lib/commons-logging-*.jar,
      %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar]
    </packagingExcludes>
  </configuration>
</plugin>