我正在开发一个库,我需要在编译之前自动生成.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
也可以。)
谢谢。
答案 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了解更多详情。