3

build現在、2 番目のリソースの場所のディレクトリを指定する次の部分を含むサンプル Maven プロジェクトがあります。

<project>
...
<build>
    <resources>
        <resource>
            <directory>src/main/second-resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <finalName>${artifactId}</finalName>
                <outputDirectory>${jarBuildPath}</outputDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

この構成で jar をパッケージ化して、クラスとリソース ファイルを適切な場所に問題なく配置できます。

しかし、値src/main/java<classesDirectory>を使用してmaven-jar-plugin構成スニペットにプロパティを追加すると、次のようになります。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.4</version>
    <configuration>
      <classesDirectory>src/main/java</classesDirectory>
      <finalName>${artifactId}</finalName>
      <outputDirectory>${jarBuildPath}</outputDirectory>
    </configuration>
 </plugin>

次に、アーカイブをパッケージ化すると、地獄、私のリソースファイルはもうありません.

classesDirectory プロパティの Maven 公式ドキュメントから、JAR にパッケージ化する必要があるクラスとリソース ファイルを含むディレクトリであることがわかります。そして、それは私にとってすべての意味があり、maven はsrc/main/javaの下にない限り、パッケージ化する権利を持たないファイルを想定しているため、私のリソースファイルが消えるのはかなり公平です。

しかし、リソース ファイルの場所を (以下のオプションのいずれかを使用して) 指定するときに、Maven は、<classesDirectory>エントリを指定した場合でも、ファイルの場所を認識します。

最上位<resources>エントリあり

<resources>
  <resource>
  <directory>src/main/second-resources</directory>
  </resource>
</resources>

またはmaven-resource-plugin経由

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.6</version>
    <configuration>
      <resources>
        <resource>
          <directory>src/main/second-resources</directory>
        </resource>
      </resources>
    </configuration>
  </plugin>

私はmavenに精通していると言えますが、この問題は私にとって奇妙に思えました.カスタムリソースディレクトリがある場合、maven-jar-pluginに含めることはお勧めできませんか?

誰でも親切にこれに光を当てることができますか?

BR。

4

1 に答える 1

3

classesDirectory

  • コンパイラ プラグインは、コンパイルされた Java クラスを格納します
  • resources-plugin は、jar-plugin によって作成されたファイルに含まれるリソースをコピーします。

jar-plugin 構成で Java ソース コード ディレクトリに変更しました。

したがって、あなたの jar には Java ソース ファイルのみが含まれていると思います。

これはあなたが望むものですか、それともリソース ファイルの 2 番目のソースを含めようとしているだけですか?

後者の場合は、次を追加するだけです。

<resources>
  <resource>
      <directory>src/main/resources</directory>
  </resource>
  <resource>
      <directory>src/main/second-resources</directory>
  </resource>
</resources>

jar プラグインに構成を追加せずに、目的を達成する必要があります。デフォルトの src/main/resources の場所にまだ必要なものがある場合は、最初の <resource>..</resource> セクションが必要であることに注意してください。

于 2014-05-07T11:24:52.670 に答える