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

时间:2009-12-28 11:58:49

标签: java vim maven-2

我使用mvn archetype:create ...设置了一个正在运行的maven项目 我可以使用mvn compile编译所有源代码,但我希望能够在一次编译单个文件。

有一种方法可以让maven编译任意单个.java文件吗?

由于

更新1:

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

更新2:

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

autotest-java是ZenTest的黑客/扩展(这是一个Ruby应用程序,可以在每次保存Ruby文件时自动启动单元测试)。

autotest-java需要maven项目结构,并要求您的编辑器/ IDE执行“save on save”。事实上,它无法识别.java文件何时被修改,而是监视.class文件以进行修改。

我成功地将autotest-java与Netbeans一起使用(支持“在保存时编译”),但我会将它与Vim一起使用。

2 个答案:

答案 0 :(得分:3)

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

$ 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

    ...

所以实际上没有真正的方法可以长期做你想做的事。

但这导致了一个问题。由于Maven使用增量编译,即它只编译自上次构建以来在磁盘上更改的类,为什么还需要只编译一个类?你的用例是什么?

答案 1 :(得分:1)

您必须configure the compiler plugin 排除其他文件,或包含

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