Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排除带有maven编译器插件的包只适用于一个包,但不适用于';我不为别人工作_Java_Maven_Maven 3_Maven Compiler Plugin - Fatal编程技术网

Java 排除带有maven编译器插件的包只适用于一个包,但不适用于';我不为别人工作

Java 排除带有maven编译器插件的包只适用于一个包,但不适用于';我不为别人工作,java,maven,maven-3,maven-compiler-plugin,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中,我定义测试排除一个包含所有java类的包 我首先尝试了以下方法来排除包com.my.app.school.course.free: <build> <plugins>

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

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

  com.my.app.school.course.free
    -CourseFree.java  
我使用Maven构建项目,在我的pom.xml中,我定义测试排除一个包含所有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>

org.apache.maven.plugins
maven编译器插件
2.3.2
**/com/my/app/school/course/free/*
它能工作我的意思是在运行
mvn clean install
之后,target/classes/下的最终版本没有包
com/my/app/school/course/free

然后,我试图排除package
com.my.app.school.course
。我只需用值
**/com/my/app/school/course/*
替换上面的
标记。我认为它也应该起作用,但它不起作用!在target/classes/I see all packages下,不排除任何包。为什么?

我想实现的是排除package
com.my.app.school.course
,但保留package
com.my.app.school.course.free
,如何实现

==========更新===========


我觉得这可能是因为我试图排除的包包含其他包中使用过的java类。我将验证我的猜测。

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


因为我试图排除的包下的一些java类已经在其他包中使用。似乎maven编译器插件能够很好地检测到这一点。

正如您所注意到的,问题在于您的其他源代码依赖于您排除的一些源代码:因为maven将
-sourcepath
传递给javac,所以javac可以找到并编译那些“缺失”的源代码

如果希望生成在这种情况下失败,可以显式地为
-sourcepath
指定一个伪值:



而且。

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


你确定你有干净的版本吗?@AdrianShum,我总是用“mvn干净安装”来运行。我尝试过类似的案例,效果很好。Maven 3.0.5,编译器插件2.3.2。我觉得这可能是因为我试图排除的包包含其他包中使用过的java类。这是java编译器的默认行为,其工作方式与此完全相同。有没有办法强制排除?@Linuslabo,改为在maven jar插件中配置您的排除项。当然值得一试。这可能有助于从声纳扫描中排除某些东西?
<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>
<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>