Java 如何使用maven编译单个文件?

Java 如何使用maven编译单个文件?,java,vim,maven-2,Java,Vim,Maven 2,我使用mvn原型:create… 我可以使用mvncile编译所有源代码,但我希望能够同时编译单个文件 有没有办法让maven编译一个任意的.java文件 谢谢 更新1: 我将在命令行中指定单个文件。我会在命令启动时选择该文件。我不会修改pom.xml 更新2: 我为什么问这个?因为我会在Vim编辑器中使用autotestjava autotestjava是ZenTest(一个Ruby应用程序,在Ruby文件的每次保存时自动启动单元测试)的一个hack/扩展 autotestjava需要mave

我使用
mvn原型:create…
我可以使用
mvncile
编译所有源代码,但我希望能够同时编译单个文件

有没有办法让maven编译一个任意的.java文件

谢谢

更新1:

我将在命令行中指定单个文件。我会在命令启动时选择该文件。我不会修改pom.xml

更新2:

我为什么问这个?因为我会在Vim编辑器中使用
autotestjava

autotestjava
是ZenTest(一个Ruby应用程序,在Ruby文件的每次保存时自动启动单元测试)的一个hack/扩展

autotestjava
需要maven项目结构,并要求编辑器/IDE执行“保存时编译”。事实上,它不识别.java文件何时被修改,而是监视.class文件的修改

我成功地将自动测试java与Netbeans(支持“保存时编译”)结合使用,但我会将其与Vim结合使用。

您必须排除其他文件或仅包含该文件

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <!-- put your configurations here -->
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

...
org.apache.maven.plugins
maven编译器插件
...

据我所知,这在命令行上是不可能的。值得注意的是,
pom.xml
中的(可选)参数和您可以定义以配置编译器插件的参数已被弃用,如下所示:

$ mvn help:describe -Dcmd=compiler:compile -Ddetail [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'help'. [INFO] ------------------------------------------------------------------------ [INFO] Building sandbox [INFO] task-segment: [help:describe] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] [help:describe {execution: default-cli}] [INFO] 'compiler:compile' is a plugin goal (aka mojo). Mojo: 'compiler:compile' compiler:compile Description: Compiles application sources Deprecated. No reason given Implementation: org.apache.maven.plugin.CompilerMojo Language: java Bound to phase: compile Available parameters: ... excludes A list of exclusion filters for the compiler. Deprecated. No reason given ... includes A list of inclusion filters for the compiler. Deprecated. No reason given ... $mvn帮助:descripe-Dcmd=编译器:compile-Ddetail [信息]正在扫描项目。。。 [信息]正在存储库中搜索前缀为“help”的插件。 [信息]------------------------------------------------------------------------ [信息]构建沙箱 [信息]任务段:[帮助:描述](聚合器样式) [信息]------------------------------------------------------------------------ [信息][帮助:描述{执行:默认cli}] [INFO]“compiler:compile”是一个插件目标(又名mojo)。 魔咒:“编译器:编译” 编译器:编译 描述:编译应用程序源代码 不赞成。没有给出理由 实现:org.apache.maven.plugin.CompilerMojo 语言:java 绑定到阶段:编译 可用参数: ... 排除 编译器的排除筛选器列表。 不赞成。没有给出理由 ... 包括 编译器的包含筛选器列表。 不赞成。没有给出理由 ... 所以从长远来看,实际上没有真正的方法来做你想做的事情


但这引出了一个问题。既然Maven使用增量编译,即它只编译自上次构建以来在磁盘上更改的类,为什么只需要编译一个类?您的用例是什么

谢谢,但我会在命令行中指定单个文件。我会在命令启动时选择该文件。我不会修改pom.xml。在插件的配置中添加一个变量而不是一个文件路径。谢谢。你能解释一下吗?为什么?只编译一个文件有什么好处?@Joachim:我会在Vim上启用“保存时编译”,以便将Vim与autotest-java一起使用。这实际上是构建系统只编译一个文件所必需的功能。更重要的是,在C++@JoachimSauer中,根据更改编译单个文件可能比重新编译所有文件快得多…500毫秒vs 500秒..感谢您的回复。我的用例是将自动测试java与vim一起使用。