web-dev-qa-db-ja.com

Mavenプロジェクトのコンパイル時にテキストファイルをターゲットフォルダーに移動する

最近作成した 質問 のわずかに異なるバージョンがあります。 MavenプロジェクトがありますNetbeans 7.3他のライブラリをインポートするために使用するbuild.xmlがありますが、ビルドオプションを構成するpom.xmlファイル。これで、Netbeans 7.3のプロジェクトフォルダーに保存されたテキストファイル(たとえばtextfile.txt)があります。

project folder
  textfile.txt
  src
    package
    package.subpackage
      MyClass.Java

コンパイルすると、jarファイルが置かれているtargetフォルダーが取得されます。

project folder
  textfile.txt
  target
    classes
    generated-sources
    ....etc
    test-classes
    MyProject.jar
  src
    package
    package.subpackage
      MyClass.Java

Mavenプロジェクトをコンパイルするときに、ターゲットフォルダーの下にコピーされるファイルtextfile.txtを作成するにはどうすればよいですか?

27
mat_boy

最初の方法は、ファイルをsrc/main/resourcesに配置することです。これは、準拠したリソース、つまりjarファイルに含まれるリソース(アイコンの画像など)を格納するためのフォルダーです。

構成ファイルをjarとともに配布する必要があるが、それによって分離する必要がある場合は、pom.xmlファイルを編集する必要があります。可能な答えは、<plugins>タグと</plugins>タグの間に次のプラグインを追加することです。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Using env.test.properties</echo>
                    <copy file="textfile.txt" tofile="${basedir}/target/textfile.txt"/>
                    </tasks>
                </configuration>
            </execution>
        </executions>
    </plugin>

さらに、 here と読むことができるので、専用のプラグインを使用して、ターゲット内の「入力」ディレクトリから「出力」ディレクトリにすべてのリソースをインポートすることもできます。

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
         <execution>
            <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
               <goal>copy-resources</goal>
            </goals>
            <configuration>
               <outputDirectory>${basedir}/target/output</outputDirectory>
               <resources>          
                    <resource>
                        <directory>input</directory>
                        <filtering>true</filtering>
                    </resource>
               </resources>              
            </configuration>            
        </execution>
     </executions>
</plugin>
39
JeanValjean

私が知っているようにいくつかのリソースを使用する最も簡単な方法(リソース設定に関する追加情報はここで見つけることができます: https://maven.Apache.org/plugins/maven-resources-plugin/ ):

<build>
  <plugins>
    <!-- your plugins, including or not maven-resource-plugin -->
  </plugins>
  <resources>
    <resource>
      <filtering>true</filtering><!-- if it is neccessary -->
      <directory>${project.basedir}</directory><!-- from -->
      <targetPath>${project.build.directory}</targetPath><!-- to -->
      <includes><!-- what -->
        <include>textfile.txt</include>
      </includes>
    </resource>
  </resources>
</build>
25
Pavel Uvarov

ビルドの出力を完全に制御するには、「Apache Maven Assembly Plugin」を使用できます。ほとんどすべて(フォーマット、サブフォルダーなど)を定義できます。

MavenのAssembly Pluginは、主に、プロジェクトの出力をその依存関係、モジュール、サイトのドキュメント、およびその他のファイルとともに1つの配布可能なアーカイブに集約できるようにすることを目的としています。

詳細

プラグインをpomファイルにインストールする必要があります。

    <plugins>
    <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
        <configuration>
            <descriptors>
                <descriptor>src/main/Assembly/yourassembly.xml</descriptor>
            </descriptors>
        </configuration>
    </plugin>
</plugins>

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-Assembly-plugin</artifactId>
            <version>x.x</version>
            <configuration>
                <descriptors>
                    <descriptor>src/main/Assembly/yourassembly.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>make-Assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- append to the packaging phase. -->
                    <goals>
                        <goal>single</goal> <!-- goals == mojos -->
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</pluginManagement>

あなたの場合、記述子「yourassembly.xml」は次のようになります。

<Assembly xmlns="http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly/1.1.3" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/plugins/maven-Assembly-plugin/Assembly/1.1.3 http://maven.Apache.org/xsd/Assembly-1.1.3.xsd">
  <id>yourassembly</id>
  <formats>
    <format>tar.gz</format>
    <format>dir</format>
  </formats>
  <fileSets>

    <fileSet>
      <directory>${project.basedir}</directory>
      <includes>
        <include>README*</include>
        <include>LICENSE*</include>
        <include>NOTICE*</include>
      </includes>
      <useDefaultExcludes>true</useDefaultExcludes>
    </fileSet>

    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>

    <fileSet>
      <directory>${basedir}</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>textfile.txt</include>
      </includes>
    </fileSet>

    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>

  </fileSets>

</Assembly>
5
gugol

私の設定ファイルを構築し、生産を更新するために、これは私のために働いた:

<build>
<resources>  
   <resource>
       <directory>${project.basedir}</directory><!-- from -->
       <targetPath>${project.build.directory}</targetPath><!-- to -->
       <includes><!-- what -->
          <include>**/*.properties</include>
       </includes>
    </resource> 
</resources>
</build>
3
leo paz