2012-06-15 64 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>