0

我正在开发一个库,我需要在编译之前自动生成一个 .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也可以)。

谢谢你。

4

1 回答 1

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了解更多详情。

于 2013-07-19T20:28:21.560 回答