web-dev-qa-db-ja.com

jarファイルに配置されていないMavenリソース

Jarファイルにいくつかのリソースを追加したいと思います。私はそれを「プロファイリング」し、ビルドセクションに追加しました。

しかし、リソースは最終的なjarファイルにはありません。

ここに私のpom.xmlのプロファイルセクションがあります:

<profile>
  <id>myProfile</id>
  <build>
    <finalName>name</finalName>
    <resources>
      <resource>
        <targetPath>.</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/profiles/myFolder</directory>
        <includes>
          <include>file.txt</include>
          <include>file.xml</include>
        </includes>
      </resource>
    </resources>
  </build>
</profile>

そしてここに私が発行するコマンド:

mvn clean install -PmyProfile

どうしましたか?

15
ssedano

あなたのPOMスニペットはグローバルに正常に見え、問題を再現できません。これが私が使用したpom.xmlです:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow</groupId>
  <artifactId>Q3459013</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <profiles>
    <profile>
      <id>myProfile</id>
      <build>
        <finalName>name</finalName>
        <resources>
          <resource>
            <directory>${basedir}/profiles/myFolder</directory>
            <filtering>false</filtering>
            <includes>
              <include>file.txt</include>
              <include>file.xml</include>
            </includes>
          </resource>
        </resources>
      </build>
    </profile>
  </profiles>
</project>

次のプロジェクト構造で:

 $ tree。
。
├──pom.xml
├──profiles
│└──myFolder
│ ├──file.txt
│└──file.xml
└──src
├──main
│└──Java
│└──com
│└──stackoverflow
│└──App.Java
└──test
└──Java
└──com
└──stackoverflow
└──AppTest.Java
 
 11ディレクトリ、5ファイル

そして、これが私が得るものです:

 $ mvn clean install -PmyProfile 
 ... 
 $ cd target 
 $ tree。
。
├──classes 
│├──com
││└──stackoverflow
││└──App.class
│├──file.txt
│└──file.xml
├──maven-archiver
│└──pom.properties
├──name.jar
├── surefire-reports 
│├──com.stackoverflow.AppTest.txt
│└──TEST-com.stackoverflow.AppTest.xml
└──test-classes
└──com
└──stackoverflow
└──AppTest.class
 $ jar xvf name.jar 
作成:META-INF/
膨張:META-INF/MANIFEST.MF 
作成:com/
作成:com/stackoverflow/
膨張:file.xml 
膨張: com/stackoverflow/App.class 
膨張:file.txt 
作成:META-INF/maven/
作成:META-INF/maven/com.stackoverflow/
作成:META-INF/maven/com.stackoverflow/Q3459013/
膨張:META-INF/maven/com.sta ckoverflow/Q3459013/pom.xml 
が膨らんだ:META-INF/maven/com.stackoverflow/Q3459013/pom.properties 

期待どおりに動作します。

11
Pascal Thivent

リソースは、Mavenで2つの方法で指定できます。単純なものは、target/classesディレクトリにコピーされる単なるディレクトリです。 リソースディレクトリフィルタリング含まれる/除外されるファイル を設定するだけです。デフォルトのリソースディレクトリはsrc/main/resourcesです。

複雑な設定の場合は、Mavenプラグインを構成する必要があります。 install次のアクションが実行されます を実行すると。パッケージ化フェーズでは、resources:resourcesゴールを使用してmaven-resources-pluginを実行します。

構成には resources mojo parameters のみを使用します。 を参照してください。

プロファイルを$ {projectdir}/profiles/myFolderに移動します。

<resources>
    <resource>
         <directory>profiles/myFolder</directory>
         <includes>
             <include>file.txt</include>
             <include>file.xml</include>
         </includes>
    </resource>
</resources>

profiles/myFolderにインクルードするファイルのみが含まれている場合は、インクルード部分を省略できます。

5
amra

このような単純な構造を試してみてください。これは私にとってはうまくいきます。

<profile>
      <id>myProfile</id>
      <build>
        <finalName>name</finalName>
        <resources>
          <resource>
                <targetPath>webapp</targetPath>
                <directory>src/main/webapp</directory>
          </resource>
          <resource>
                <directory>src/main/resources</directory>
          </resource>
        </resources>
      </build>
    </profile>
3
Jyoti Prakash

問題は次のとおりです:<targetPath>.</targetPath>、問題を修正するためにそれを開始します。

Jarをパックするには、mavenはtarget/classesフォルダーのコンテンツを使用します。それ以外の場合は、maven-jar-pluginを使用して、何をコピーするかを自分で構成します。

2
harvyS