Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译Maven项目时将文本文件移动到目标文件夹中_Maven_Build Automation_Netbeans 7 - Fatal编程技术网

编译Maven项目时将文本文件移动到目标文件夹中

编译Maven项目时将文本文件移动到目标文件夹中,maven,build-automation,netbeans-7,Maven,Build Automation,Netbeans 7,我有一个稍微不同的版本,我最近做的。 我在Netbeans 7.3下有一个Maven项目,它没有任何build.xml文件来配置构建选项,而有一个pom.xml我用来导入其他库。现在,我在Netbeans 7.3的项目文件夹中存储了一个文本文件(比如textfile.txt),例如 当我编译时,我会得到一个存放jar文件的target文件夹,例如 project folder textfile.txt target classes generated-sources

我有一个稍微不同的版本,我最近做的。 我在Netbeans 7.3下有一个Maven项目,它没有任何
build.xml
文件来配置构建选项,而有一个
pom.xml
我用来导入其他库。现在,我在Netbeans 7.3的项目文件夹中存储了一个文本文件(比如
textfile.txt
),例如

当我编译时,我会得到一个存放jar文件的
target
文件夹,例如

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

当我编译Maven项目时,如何将文件textfile.txt复制到目标文件夹下?

第一种方法是将文件放入
src/main/resources
文件夹中,该文件夹用于存储已编译的资源,即jar文件中包含的资源(例如图标的图像)

如果需要将配置文件与jar一起分发,但要用jar分隔,则必须编辑
pom.xml
文件。一个可能的答案是在
标记之间添加以下插件

<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>

org.apache.maven.plugins
您还可以使用专用插件将所有资源从“输入”目录导入目标内的“输出”目录,例如:

<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>

maven资源插件
3.0.1
复制资源
验证
复制资源
${basedir}/target/output
输入
真的

据我所知,使用某些资源的最简单方法(有关资源配置的其他信息,您可以在此处找到:):


真的
${project.basedir}
${project.build.directory}
textfile.txt

要绝对控制构建的输出,可以使用“ApacheMaven汇编插件”。您几乎可以定义所有内容(格式、子文件夹…)

Maven的汇编插件主要用于允许用户将项目输出及其依赖项、模块、站点文档和其他文件聚合到一个可分发的归档文件中

您必须在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>

maven汇编插件
src/main/assembly/yoursassembly.xml
org.apache.maven.plugins
maven汇编插件
x、 x
src/main/assembly/yoursassembly.xml
组装
包裹
单身
在您的情况下,描述符“yoursassembly.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>

你的集会
tar.gz
迪尔
${project.basedir}
自述*
许可证*
通知*
真的
${project.build.directory}
/
*jar先生
${basedir}
/
textfile.txt
解放党
假的

用于构建我的设置文件和更新产品,这对我很有用:

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

${project.basedir}
${project.build.directory}
**/*.物业

谢谢!我不确定第一个插件是否正确使用,但效果很好。太棒了,这很有帮助,谢谢JeanValjean!如何确保textfile.txt也被复制到jar文件?我知道了。谢谢,这太容易了。谢谢这应该是最简单的接受答案。我可以设置一个目标列表吗?在我的情况下,我需要复制到多个目标。仅当您显式调用
mvn resources:resources
对吗?@djangofan不,它一直有效。它是POM构建描述符的一部分,而不是插件。但是,它会更改此POM中任何构建的默认Maven行为。
<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>
<build>
<resources>  
   <resource>
       <directory>${project.basedir}</directory><!-- from -->
       <targetPath>${project.build.directory}</targetPath><!-- to -->
       <includes><!-- what -->
          <include>**/*.properties</include>
       </includes>
    </resource> 
</resources>
</build>