在 Maven 中仅编译选定的文件

2022-09-01 10:47:07

我只想编译源目录中选定的文件或目录(包括子目录)。我很确定我可以使用 的配置来执行此操作,但它似乎没有像我预期的那样工作,因为它仍然将所有类编译为 .真正奇怪的是,Maven输出表明该设置实际上可以完成其工作,因为:<includes>maven-compiler-plugintarget/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

但是没有编译器的配置,我有:

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

但是,在这两种情况下,所有14个类都被编译成我所提到的。您能解释一下或建议另一种解决方案来仅编译选定的文件吗?target/classes


答案 1

简单的应用程序,有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 个类。
任何包含的组合都运行良好
,或者您的意思是其他什么?


答案 2

我也遇到过类似的情况。我们只需要将修改后的文件热插拔到我们的远程 Docker 容器中,以缩短更改部署时间。这就是我们如何解决它。

添加包含选项在构建插件与命令行参数。请注意,由于我们想要添加多个文件,因此我们使用了包含和不包含

         <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/*

推荐