-1

Maven が src/java/main の .java ファイルをどのように扱うかを理解しています。しかし、より一般的な場合に使用できますか? より抽象的に言えば、ディレクトリA1、A2、A3からいくつかの(必ずしも.javaだけではない)ソースを読み取り、いくつかのファイル(おそらくいくつかは生成された.java)をディレクトリB1、B2に置くa.exeがすでにあるとします。 . また、現在 B1、B2、B3 からファイルを読み取り、何か他のものを生成する b.exe もあります。いくつかの同様の手順。(実際の問​​題が背後にあります)。

mavenがこの作業を行うように、POM.xmlファイルを作成したいと思います。それは可能ですか?a.exe と b.exe は maven プラグインとしてワープする必要があると思います。次に、Maven ドキュメントで次のように表示されます。

<build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
    <outputDirectory>${basedir}/target/classes</outputDirectory>
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
    ...
</build>

気になるのは、「sourceDirectory」自体がハードコードされた名前のように見えることです。Maven は代わりに A1 および A2 タグを受け入れますか?

4

3 に答える 3

1

答えは次のとおりです。いいえ、MAVENは柔軟性がありません。これは、この世界のすべてのMavenフォーラムの助けを借りても解決できなかった簡単なタスクです。次のようなPOMを作成します。

  1. Javaファイルでいっぱいのディレクトリをコンパイルします
  2. 他のことをします(よろしければ-サンプルのHello World Mojoプラグインを実行します)
  3. 他のいくつかのJavaファイルを使用して他のディレクトリをコンパイルします。

     NO WAY !
    
于 2012-11-07T01:13:00.260 に答える
1

(他の人があなたにもっと喜んで答えてくれるように、あなたの以前の質問のいくつかを受け入れることを検討しますか?)

構成よりも規約に対するMavenのストレス。sourceDirectory(Java) コンパイラ プラグインで使用するいくつかの要素を定義済みの規則の 1 つとして扱うことができます。

やりたいことは実現できます。プラグイン/MOJO を自分で作成して、必要なディレクトリから読み取り、必要な外部 exe を呼び出すことができます。MOJO に適切なデフォルト値を設定することで、プロジェクトの POM を次のようにすることができます。

<project>
  :
  :
  <build>
    <plugins>
      <plugin>
        <groupId>yourPluginGroup</group>
        <artifactId>generate-A-data</artifactId>
        <!-- if you want extra configuration, you can have <configuration> elements -->
      </plugin>

      <plugin>
        <groupId>yourPluginGroup</group>
        <artifactId>generate-B-data</artifactId>
      </plugin>
    </plugins>
  </build>
<project>

悪くないでしょ?

ただし、Maven が「柔軟」であるかどうかはかなり疑問です。柔軟性は Maven の目的ではないと思います。Maven はビルドに特化しており、従うべきさまざまなスケルトン (ビルド フェーズ、依存関係スコープなど) を定義します。Maven を Ant などの他のスクリプト ベースのツールほど「柔軟」にすることはできません。

于 2012-10-09T03:49:51.997 に答える
0

exec プラグインとコンパイラ プラグインを「generate-sources」または「process-classes」フェーズにバインドすることで、プラグインを作成せずにこれを実行できる場合があります。ビルド ヘルパー プラグインは、ソース パスの追加にも役立つ場合があります。

元のケースでは、次のバインディングを試すことができます。

  • build-helper-maven-plugin を初期化フェーズにバインドし、必要なソース ディレクトリ (B1 と B2 など) を追加します。
  • exec-maven-plugin が generate-sources フェーズにバインドされ、a.exe 用と b.exe 用の 2 つの実行が行われます。

Hello World Mojo の場合、次を process-classes フェーズに (順番に) 追加するとどうなるでしょうか?

  • Hello World Mojo プラグイン
  • ソース ディレクトリを追加するヘル​​パー プラグインをビルドします。
  • コンパイラプラグイン

私が見ることができる唯一の欠点は、最初のソース ディレクトリが再コンパイルされることです。しかし、コンパイラは、何も変更されていないことを認識できるほどスマートである必要があり、それが問題であるかどうかは、実際にこれを行う理由によって異なります。Hello World を実行する前に、ディレクトリ A のクラス ファイルが必要なのはなぜですか? おそらく、別々のモジュールになるはずの 2 つの別々のコードを見ているのではないでしょうか?

于 2014-12-15T03:21:31.587 に答える