簡體   English   中英

使用 maven-compiler-plugin 排除包適用於一個包但不適用於另一個包

[英]Excluding package with maven-compiler-plugin works for one package but doesn't work for another

我的項目具有以下包結構:

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但保留com.my.app.school.course.free ,如何實現?

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

我覺得可能是因為我試圖排除的包包含在其他包中使用過的 java 類。 我會驗證我的猜測。

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

因為我試圖排除的包下的一些java類已經在其他包中使用了。 似乎 maven-compiler-plugin 很聰明地檢測到這一點。

正如您所注意到的,問題在於您的其他來源依賴於您排除的一些來源:因為 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-174以及有關 javac 如何處理-sourcepath和其他參數的詳細說明

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM