仅编译Maven中的选定文件

时间:2012-06-15 13:29:46

标签: java maven

我想只编译源目录中的选定文件或目录(包括子目录)。我非常确定我可以使用<includes>的{​​{1}}配置执行此操作,但它似乎无法正常工作,因为它仍将所有类编译为maven-compiler-plugin。真正奇怪的是,Maven输出表明该设置实际上是有效的,因为:

target/classes

我有:

  <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

然而,在这两种情况下,正如我所提到的,所有14个类都编译成[INFO] Compiling 14 source file to c:\Projects\test\target\classes 。你能解释一下还是建议另一个只编译选定文件的解决方案吗?

4 个答案:

答案 0 :(得分:32)

简单的应用程序有3个类。

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

中的

pom.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 :(得分:1)

使用类似Ant的包含/排除表示法的maven-compiler-plugin。 您可以在Ant文档Ant FileSet Type

中查看示例

如果您只想包含一个目录中的文件,则需要像以下一样编写:

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

要包含路径中的子目录,它将是:

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

答案 2 :(得分:0)

使用maven编译器插件2.5.1编译包含或排除文件没有任何困难。 Here是我用于此目的的虚拟项目。也许您使用的include模式不同。

答案 3 :(得分:0)

我也遇到过类似的情况。我们需要仅将修改后的文件热交换到我们的远程Docker容器中,以缩短更改部署时间。这就是我们解决的方法。

在带有命令行参数的构建插件中添加包含选项。 请注意,由于我们要添加多个文件,因此我们使用了 includes ,而不是 include

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <compilerVersion>1.8</compilerVersion>
                <source>1.8</source>
                <target>1.8</target>
                <includes>${changed.classes}</includes>
            </configuration>
        </plugin>

现在运行带有参数的编译阶段,例如:

mvn compile -Dchanged.classes=com/demo/ClassA.java,com/demo/ClassB.java,com/demo2/*