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 に答える