2013-05-04 210 views
18

我有一個我最近做出的the question的輕微不同版本。 我下的Netbeans 7.3,一個的Maven項目,該項目沒有任何build.xml文件來配置建設方案,同時有,我用它來導入其他庫pom.xml。現在,我有一個存儲在Netbeans 7.3項目文件夾中的文本文件(假設爲textfile.txt),例如,編譯Maven項目時將文本文件移動到目標文件夾中

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

當我編譯我得到一個target所在的文件夾罐子文件放在,例如

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

如何在編譯Maven項目時將文件textfile.txt複製到目標文件夾下?

回答

28

第一種方法是將文件放入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> 
+0

謝謝!我不確定第一個插件是否正確使用,但工作正常。 – 2013-05-05 07:55:56

+0

太棒了,這有助於很多,謝謝JeanValjean! – 2017-10-20 20:47:15

11

最簡單的方法,利用一些資源,因爲我知道(對資源配置的更多信息,你可以在這裏找到: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> 
+0

如何確保textfile.txt被複制到jar文件? – Sam 2016-09-16 18:00:57

+0

我明白了。謝謝。 – Sam 2016-09-16 18:09:57

4

爲了有一個ABSOL你可以使用「Apache Maven Assembly Plugin」來控制你的構建的輸出。你可以定義幾乎所有的東西(格式,子文件夾...)。

Maven的Assembly Plugin主要是爲了允許用戶將項目輸出及其依賴項,模塊,站點文檔和其他文件聚合到一個可分發的歸檔中。

More info

你必須安裝插件在你的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> 
相關問題