2012-06-15 87 views
17

我想僅編譯源目錄中選定的文件或目錄(包括子目錄)。我非常確定我可以使用的<includes>的配置,但它似乎無法正常工作,因爲它仍將所有類編譯爲target/classes。什麼是真正奇怪的,Maven的輸出表明,設置實際上做的工作,因爲:僅編譯Maven中的選定文件

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.5.1</version> 
    <configuration> 
     <includes> 
     <include>com/example/dao/bean/*.java</include> 
     </includes> 
    </configuration> 
    </plugin> 

我:

[INFO] Compiling 1 source file to c:\Projects\test\target\classes 

,但沒有編譯器的配置,我有:

[INFO] Compiling 14 source file to c:\Projects\test\target\classes 

然而,在這兩種情況下,我所提到的所有14個類都被編譯爲target/classes。你能解釋一下還是建議另一種解決方案來只編譯選定的文件?

+0

您是否記得在測試之前做一次清潔? – artbristol

+0

你以前試過排除**/*嗎?我想默認情況下maven包含所有內容,你必須排除。您是否正在使用帶有偶然機會(如Eclipse)的「autobuild」選項的IDE? – mschonaker

+0

是的,我在編譯前清理。是的,我試圖排除'**/*。java'。這次我不使用IDE。只需簡單的'pom.xml'和控制檯。 –

回答

22

3類簡單的應用程序。

com/company/Obj1.java 
com/company/Obj2.java 
com/company/inner/Obj3.java 

buildpom.xml

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.0.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <includes> 
        <include>com/company/inner/*.java</include> 
        </includes> 
       </configuration> 
      </plugin> 
      </plugins> 

    </build> 

結果:1類被編譯。
而包括的任何組合運行良好
或者你的意思是別的嗎?

+1

OMG!作品!但是編譯器的版本2.0.2!版本2.5.1和2.3.2忽略包含和排除。看來我們在這裏發現了一個bug。 –

+6

編譯器的版本2.1是它的最後一個工作。 –

+0

有趣......我在上面寫的是我的例子(我的模塊),但總的來說,就像@Ilya的例子那樣簡單的項目,即使使用新版本的'maven-compiler-plugin'也沒有問題。看起來在我的模塊的'pom.xml'或父母的層次結構中有一些東西(有幾個)。我會試着調查我的情況,並找出答案,其實是錯誤的。如果Maven編譯器確實存在一些問題,我會爲他們創建JIRA票據。 –

0

我沒有困難包括或排除文件編譯與maven編譯器插件2.5.1Here是我用於此目的的虛擬項目。也許你使用的include模式是不同的。

0

maven-compiler-plugin使用類似Ant的包含/排除表示法。 你可以看到Ant文檔Ant FileSet Type

的例子如果你想從一個目錄僅包含的文件,你需要把它寫像你這樣:

<include>com/example/dao/bean/*.java</include> 

也包括從路徑的子目錄中,這將是:

<include>com/example/dao/bean/**/*.java</include>