使用Maven复制文件的最佳做法

我使用Maven2将配置文件和各种文档从开发环境复制到开发服务器目录。 奇怪的是,Maven在这个任务上似乎并不强大。


一些选项:

  • 在Maven中简单使用复制任务
  • <copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>

  • 使用Ant插件从Ant执行复制。

  • 构建一个类型为zip的工件,以及通常为jar类型的POM的“主”工件,然后将该工件从存储库解压缩到目标目录中。

  • maven-resources插件,如下所述。

  • Maven Assembly插件 - 但是这似乎需要大量的手动定义,当我想简单地“常规”操作时。

  • 这个页面甚至展示了如何构建一个插件来复制!

  • maven-upload插件,如下所述。

  • maven-dependency-plugin with copy,如下所述。


  • 所有这些看起来是不必要的特别的:Maven应该擅长完成这些标准任务而没有大惊小怪。

    有什么建议?


    不要回避Antrun插件。 仅仅因为有些人倾向于认为Ant和Maven在反对,他们不是。 如果您需要执行一些不可避免的一次性定制,请使用复制任务:

    <project>
      [...]
      <build>
        <plugins>
          [...]
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <phase>deploy</phase>
                <configuration>
                  <tasks>
    
                    <!--
                      Place any Ant task here. You can add anything
                      you can add between <target> and </target> in a
                      build.xml.
                    -->
    
                  </tasks>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      [...]
    </project>
    

    在回答这个问题时,我将重点放在你提问的细节上。 我如何复制文件? 这个问题和变量名称引发了一个更大的问题,例如:“是否有更好的方法来处理服务器配置?” 使用Maven作为构建系统来生成可部署的构件,然后在单独的模块或其他位置完成这些自定义。 如果你共享了更多的构建环境,可能会有更好的方式 - 有一些插件可以配置多个服务器。 你可以附加一个在服务器根目录下解压缩的程序集吗? 你使用什么服务器?

    再次,我确信有更好的方法。


    <build>
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.3</version>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include> **/*.properties</include>
                </includes>
            </resource>
        </resources>
        ...
    </build>
    

    为了复制文件使用:

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <executions>
                    <execution>
                        <id>copy-resource-one</id>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
    
                        <configuration>
                            <outputDirectory>${basedir}/destination-folder</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>/source-folder</directory>
                                    <includes>
                                        <include>file.jar</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
               </executions>
            </plugin>
    

    为了复制文件夹与子文件夹使用下一个配置:

               <configuration>
                  <outputDirectory>${basedir}/target-folder</outputDirectory>
                  <resources>          
                    <resource>
                      <directory>/source-folder</directory>
                      <filtering>true</filtering>
                    </resource>
                  </resources>              
                </configuration>  
    
    链接地址: http://www.djcxy.com/p/29671.html

    上一篇: Best practices for copying files with Maven

    下一篇: repository and deploy to local JBoss using mvn