如何在Maven中构建项目时执行已编译的jar

时间:2013-07-19 20:15:39

标签: java maven

我正在开发一个库,我需要在编译之前自动生成.java文件。我发现了一个maven-exec-plugin并且我以这种方式配置了它

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <executions>
    <execution>
      <id>generate-city-enum</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>java</goal>
      </goals>
      <configuration>
        <executable>java</executable>
        <mainClass>org.codeforamerica.open311.city_enum_builder.EnumBuilder</mainClass>
        <arguments>
          <argument>-jar</argument>
          <argument>city_enum_builder.jar</argument>
          <argument>cities.json</argument>
          <arguments>output.java</arguments>
        </arguments>
      </configuration>
    </execution>
 </executions>
</plugin>

问题是运行mvn -e compile我收到以下错误:

java.lang.ClassNotFoundException: org.codeforamerica.open311.city_enum_builder.EnumBuilder

但是,这是主要类,事实上,如果我执行java -cp .:city_enum_builder.jar org.codeforamerica.open311.city_enum_builder.EnumBuilder cities.json output.java它就可以了。

此外,这个.jar不需要指定一个类来执行(java -jar city_enum_builder.jar cities.json output.java也可以。)

谢谢。

1 个答案:

答案 0 :(得分:1)

我想你将exec:exec目标(产生一个外部进程)的参数与exec:java混淆(它只是在Mavens VM中执行一些Java类)。

(因此,对于您的示例,<executable>java</executable>将被忽略(因此没有调用java.exe),显然您的类本身不知道如何解析类路径。

所以添加项目,将city_enum_builder.jar作为依赖关系添加到exec-maven-plugin,它应该可以正常工作。

不要忘记查看http://mojo.codehaus.org/exec-maven-plugin/java-mojo.html了解更多详情。