【问题标题】:Copying multiple resource directories to independent target directories with maven使用maven将多个资源目录复制到独立的目标目录
【发布时间】:2013-10-24 21:50:30
【问题描述】:

Maven resources plugin:

这个目标需要你配置要复制的资源,并指定输出目录。

使用 maven 将basedir 中的两个(或更多)外部资源目录复制到构建输出目录(请参阅blahuggh)。

${basedir}/ 
  - pom.xml
  - blah/
  - uggh/
  - src/
    - main/..
    - test/..
  - target/
    - classes/..
    - blah/
    - uggh/

例如,给定上面的目录结构,使用 maven 将 blahuggh 复制到目标目录。复制一个或另一个很容易,但是,该插件只接受一个 outputDirectory。如果您将target 目录和两个目录都指定为资源,则每个目录的内容都会复制到target,而不是目录本身。

插件的额外使用会覆盖最初的。此外,我尝试指定整个 basedir 并且只包括所需的目录。这不会复制任何内容。

这里是一个复制单个目录的例子:

  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
      <execution>
        <id>copy-resources</id>
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/target/blah</outputDirectory>
          <resources>
            <resource>
                <directory>blah</directory>
                <filtering>true</filtering>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

【问题讨论】:

    标签: java maven


    【解决方案1】:

    这是我找到的更简单的解决方案,它正在工作......

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>   
                </configuration>
            </plugin>
        </plugins> 
        <resources>
            <resource>
                <directory>${basedir}/src/main/java/org/mc2/mymusic/gui/main/Menu/resources</directory>
                <targetPath>${basedir}/target/classes/org/mc2/mymusic/gui/main/Menu/resources</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>  
    </build>
    

    【讨论】:

    • 即使没有过滤部分也对我有用(因为我将它用于纯文件),语法漂亮而简洁
    【解决方案2】:

    如果您想复制更多目录或文件 - 更好的选择:

      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <tasks>
                <copy todir="${basedir}/target/blah" overwrite="true">
                     <fileset dir="blah"/>
                </copy>
                <copy file="${basedir}/target/blah/somefile"
                      todir="../target_webapp_eclaims/WEB-INF" overwrite="true"/>
              </tasks>
            </configuration>
          </execution>
        </executions>
      </plugin>
    

    【讨论】:

      【解决方案3】:

      Maven 隐藏了所有内容以使其更易于编码。 您可以通过多种方式实现这一目标。

      1. 在资源插件中编辑默认执行。 (最简单) 这也可以使用包含标签或不同的资源来编写
      2. 在资源插件中编写不同的执行。
      3. 使用 Antrun 插件。 (你不妨用 ant 编写整个构建)
      4. Maven 复制重命名插件。
      5. 还有许多其他我在这里没有提到的方式......

      编辑默认插件--

      <resources>
          <resource>
              <directory>${basedir}<directory>
              <includes>
                  <include>blah</include>
                  <include>ughh</include>
              </includes>
          <resource>
      <resources>
      <plugins>
          <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <configuration>
                  <outputDirectory>${basedir}/target</outputDirectory>
              </configuration>
          </plugin>
      </plugins>
      

      【讨论】:

        【解决方案4】:
                <resources>
                  <resource>
                    <directory>src/main/resources</directory>
                    <filtering>false</filtering>
                    <targetPath>${basedir}/target</targetPath>
                  </resource>
                  <resource>
                    <directory>src/main/resources</directory>
                    <filtering>false</filtering>
                    <targetPath>${basedir}/target/classes</targetPath>
                  </resource>
               </resources>
        
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <nonFilteredFileExtensions>
                            <nonFilteredFileExtension>jks</nonFilteredFileExtension>
                        </nonFilteredFileExtensions>
                        <executions>
                            <execution>
                                <id>copy-resources-1</id>
                                <phase>validate</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                            </execution>
                        </executions>
                    </configuration>
                </plugin>
           </plugins>
        

        【讨论】:

          【解决方案5】:
              <resources>
                  <resource>
                        <directory>${basedir}/src/scripts</directory>
                        <includes>
                            <include>data-octopus.ps1</include>
                        </includes>
                        <targetPath>${basedir}/target/data</targetPath>
                  </resource>
                  <resource>
                        <directory>${basedir}/src/scripts</directory>
                        <includes>
                            <include>service-octopus.ps1</include>
                        </includes>
                        <targetPath>${basedir}/target/service</targetPath>
                  </resource>
              </resources>
          
              </plugins>
                  ...
              </plugins>
          

          【讨论】:

            【解决方案6】:

            你可以使用蚂蚁风格的模式

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}</directory>
                                    <includes>
                                        <include>blah/**</include>
                                        <include>uggh/**</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            

            【讨论】:

              【解决方案7】:

              对我来说,这个在 Maven 3 中运行良好:

                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-resources-plugin</artifactId>
                          <version>2.5</version>
                          <executions>
                              <execution>
                                  <id>custom-resources</id>
                                  <phase>process-resources</phase>
                                  <goals>
                                      <goal>copy-resources</goal>
                                  </goals>
                                  <configuration>
                                      <outputDirectory>${project.build.directory}</outputDirectory>
                                      <resources>                                        
                                          <resource>
                                              <targetPath>${basedir}/target/blah</targetPath>
                                              <directory>blah</directory>
                                              <filtering>true</filtering>
                                          </resource>             
                                          <resource>
                                              <targetPath>${basedir}/target/uggh</targetPath>
                                              <directory>uggh</directory>
                                              <filtering>false</filtering>
                                          </resource>              
                                      <encoding>UTF-8</encoding>
                                  </configuration>            
                              </execution>
                          </executions>
                      </plugin>
              

              【讨论】:

              • 这会将blahuggh 的所有内容转储到target,但在我的情况下不会转储目录本身。不完全是我要找的,但感谢您的建议
              • 仅从配置中我并不清楚,我希望它如何表现。在 Maven 文档中,&lt;targetPath&gt;“相对于目标/类目录”。 maven.apache.org/ref/3.2.2/maven-model/apidocs/org/apache/maven/…
              • 我刚试过这个,它也适用于“maven-war-plugin”
              • 我注意到你不需要设置&lt;outputDirectory&gt;,如果你为两个不同的目录指定&lt;targetPath&gt;是不同的
              【解决方案8】:

              阅读您的示例,我认为您不必包含和配置 maven-resource-plugin。 只需将这些资源元素添加到&lt;build&gt;&lt;resources/&gt;-tag。查看http://maven.apache.org/ref/3.1.1/maven-model/maven.html#class_resource您可以使用哪些其他标签。

              【讨论】:

              • 你是对的。这只是为了展示一种稍微不那么冗长的方式来使用 maven-resource-plugin。对于这种情况,要在输出目录中保留源文件夹名称。
              【解决方案9】:

              这是文件结束的地方:

              <outputDirectory>${basedir}/target/blah</outputDirectory>
              

              这是它的复制来源:

              <directory>src/main/otherresources</directory>
              

              会有一个&lt;include&gt;&lt;includes&gt; 标签来告诉文件名

              倍数

              对于多个文件夹,您需要多个 &lt;execution&gt;s 和不同的 &lt;id&gt;s:

                <plugin>
                  <artifactId>maven-resources-plugin</artifactId>
                  <version>2.6</version>
                  <executions>
                    <execution>
                      <id>copy-resources-1</id>
                      <phase>validate</phase>
                      <goals>
                        <goal>copy-resources</goal>
                      </goals>
                      <configuration>
                        <outputDirectory>${basedir}/target/blah</outputDirectory>
                        <resources>
                          <resource>
                              <directory>blah</directory>
                              <filtering>true</filtering>
                          </resource>
                        </resources>
                      </configuration>
                    </execution>
                    <execution>
                      <id>copy-resources-2</id>
                      <phase>validate</phase>
                      <goals>
                        <goal>copy-resources</goal>
                      </goals>
                      <configuration>
                        <outputDirectory>${basedir}/target/ughh</outputDirectory>
                        <resources>
                          <resource>
                              <directory>ughh</directory>
                              <filtering>true</filtering>
                          </resource>
                        </resources>
                      </configuration>
                    </execution>
                  </executions>
                </plugin>
              

              【讨论】:

              • 文件系统上的文件夹在哪里? src/main/resources/ughh ?
              • 我正在使用 maven 3.3.3 这还有可能吗?
              • ${basedir} 是您工作区的根文件夹。它是其中包含 pom.xml 的文件夹。
              猜你喜欢
              • 2014-06-10
              • 1970-01-01
              • 2020-03-22
              • 1970-01-01
              • 2019-06-20
              • 1970-01-01
              • 2022-12-22
              • 1970-01-01
              • 2017-11-11
              相关资源
              最近更新 更多