我有配置文件和各种文件,我想要复制开发环境的开发服务器目录使用Maven2.奇怪的是,专家似乎并不强在这一任务。


一些选择:

  • 简单的使用 复制 任务在家

<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>

  • 用蚂蚁插件执行 复制 从蚂蚁。

  • 构建一个项目的类型 拉链, 与"主"的神器POM,这是通常的类型 罐子, 然后 unpack 那个神器从储存库为目标目录。

  • 专家资源 插件,如下面提到。

  • 专家会插件--但这似乎需要大量的手册的定义,当我想要做的事情简单地和"传统上."

  • 这页 甚至可以显示如何建立一个插件做复制的!

  • 专家-上传 插件,如下面提到。

  • 专家-依赖-插件复制, 如下面提到。


所有这些似乎毫无必要地问题特设:家应该擅长做这些标准的任务没有大惊小怪和麻烦。

任何建议?

有帮助吗?

解决方案

不要回避的Antrun插件。只是因为一些人倾向于认为,只蚂蚁和家都在反对派,他们不是。使用复制的任务如果需要执行一些不可避免的一个自定义:

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

在回答这个问题,我注重细节什么你要求。我怎么复制一文件?问题和变量名称引领我到一个更大的问题,如:"是否有更好的方式来处理服务器供应?" 使用专家作为一个建立系统以产生可部署的项目,然后执行这些定义在独立的模块或者别的地方完全。如果你分享一点你的生成环境,可能有一个更好的方式-有插件提供一个服务器数量。你可以附加大会,是解开服务器的根吗?什么样的服务器你都用?

再次,我肯定有一个更好的办法。

其他提示

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

该专家的依赖性的插件救了我很多的时间抚摸蚁任务:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>install-jar</id>
            <phase>install</phase>
            <goals>
                <goal>copy</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>...</groupId>
                        <artifactId>...</artifactId>
                        <version>...</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>...</outputDirectory>
                <stripVersion>true</stripVersion>
            </configuration>
        </execution>
    </executions>
</plugin>

相关性:复制 是documentend,并有更多的有用的目标,如解包。

对于一个简单的复制任务,可以推荐我 复制重新命名-玛文件.这是直截了当和简单的使用:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>com.coderplus.maven.plugins</groupId>
        <artifactId>copy-rename-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>copy-file</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <sourceFile>src/someDirectory/test.environment.properties</sourceFile>
              <destinationFile>target/someDir/environment.properties</destinationFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

如果你想要复制一个多文件,更换 <sourceFile>...</destinationFile> 部分与

<fileSets>
  <fileSet>
    <sourceFile>src/someDirectory/test.environment.properties</sourceFile>
    <destinationFile>target/someDir/environment.properties</destinationFile>
  </fileSet>
  <fileSet>
    <sourceFile>src/someDirectory/test.logback.xml</sourceFile>
    <destinationFile>target/someDir/logback.xml</destinationFile>
  </fileSet>                
</fileSets>

此外,您可以指定多个执行在多个阶段,如果需要,第二个目标是"重新命名",这只是没什么说的话,其余的配置保持不变。对更多的使用情况的实例请参阅 使用情况的一页.

注意到:这个插件只能复制文件,没有目录。(由于@詹姆斯。garriss为了找到这个的限制。)

蚂蚁解决上述最容易配置,但是我必须运用专家-传-插件的讨论大多数集中.我无法找到良好的文件,这是我如何使用它:

<build>
  <plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
    <configuration>
       <resourceSrc>
             ${project.build.directory}/${project.build.finalName}.${project.packaging}
       </resourceSrc>
       <resourceDest>${jboss.deployDir}</resourceDest>
       <serverId>${jboss.host}</serverId>
       <url>${jboss.deployUrl}</url>
     </configuration>
  </plugin>
</build>

变量,如"${boss.主}"参考上述定义在我~/.m2/settings.xml 并且激活使用专家的概况。这个方案是不受约束的要Boss,这正是我叫我的变量。我有一个轮廓,用于开发、测试和生活。以上我的耳朵一个boss实例在测试环境,我将执行:

mvn upload:upload -P test

这里是一个snipet从settings.xml:

<server>
  <id>localhost</id>
  <username>username</username>
  <password>{Pz+6YRsDJ8dUJD7XE8=} an encrypted password. Supported since maven 2.1</password>
</server>
...
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <jboss.host>localhost</jboss.host> 
      <jboss.deployDir>/opt/jboss/server/default/deploy/</jboss.deployDir>
      <jboss.deployUrl>scp://root@localhost</jboss.deployUrl>
    </properties>
  </profile>
  <profile>
    <id>test</id>
    <properties>
       <jboss.host>testserver</jboss.host>
       ...

注:该讨论大多数集中专家的回购,有这个插件是: https://maven.atlassian.com/public/

我建议下载来源,并寻找在本文件里看到的所有特性的插件提供。

`

好的,专家不应该是良好的做细颗粒状的任务,它不是一个脚本语言喜欢庆典或蚂蚁,而是声明性的-你说-我需要一个战争,或者一个耳朵,你会得到它。但是如果你需要定义的战争或是耳朵看起来应该像里面,你有问题。它不仅仅是程序性的像蚂蚁,但声明。这有一些优点在开始,并且可能有很大的弊端。

我猜最初的概念是具有良好的插件,这"仅仅是工作",但现实是不同的,如果你做的非标准的东西。

但是如果你把足够的努力在你的劲歌和一些定义插件,你会得到一个更好的建造环境作用蚂蚁例如(取决于你的项目的课程,但它得到更多和更真实的更大的项目)。

我已经有非常良好的经验 复制-玛文件.它有一个更方便和简洁的语法相比,家资源插件。

一个通用的方法来复制任意的文件是以利用 专家旅行车 运输抽象概念。它可以处理各种目的通过议定书喜欢 file, HTTP, FTP, SCPWebDAV.

有几个插件,提供设施,复制文件通过使用 Wagon.最值得注意的是:

  • 开箱子 专家部署的插件

    还有就是 deploy-file 目标。它相当灵活的,但可以做的工作:

    mvn deploy:deploy-file -Dfile=/path/to/your/file.ext -DgroupId=foo 
    -DartifactId=bar -Dversion=1.0 -Durl=<url> -DgeneratePom=false
    

    明显的缺点使用 Maven Deploy Plugin 是,它是指定的工作与专家库。它具有特别结构和元数据。你可以看到,该文件被放置在 foo/bar/1.0/file-1.0.ext 和验和文件被创建。有没有办法解决这个问题。

  • 车家插件

    使用 upload-single 目标:

    mvn org.codehaus.mojo:wagon-maven-plugin:upload-single
    -Dwagon.fromFile=/path/to/your/file.ext -Dwagon.url=<url>
    

    使用 Wagon Maven Plugin 复制是直接的和似乎是最多的用途。


在上面的例子 <url> 可以是任何支持的协议。看到现有名单 货车供应商.例如

  • 将文件复制本地: file:///copy/to
  • 复制文件的主机的远程在运行 SSH: scp://host:22/copy/to


上面的例子穿插件参数的命令行。或者,插件,可以直接配置在 POM.然后将调用将只是喜欢 mvn deploy:deploy-file@configured-execution-id.或者,它可能为特定的建立阶段。


请注意,议定书喜欢 SCP 你的工作将需要定义的扩展你的 POM:

<build>
  [...]
  <extensions>
    <extension>
      <groupId>org.apache.maven.wagon</groupId>
      <artifactId>wagon-ssh</artifactId>
      <version>2.12</version>
    </extension>
  </extensions>


如果目的地复制,要求身份验证,证书可以提供通过 Server 设置. repositoryId/serverId 通过的插件必须与服务器定义中的设置。

我只能假设你${的项目。服务器。config}酒店是什么的定义和外的标准目录的布局。

如果是这样,然后我会使用复制的任务。

另一种方式是要束这些东西进入一个项目使用的组件。然后你就可以使用的依赖性的插件来解开这些文件,你想在哪里。也有副本的目标,在依赖性的插件复制的文物。

我能够拼凑出一些不同的来源为这个回答:

...
<repository>
    <id>atlassian</id>
    <name>Atlassian Repo</name>
    <url>https://maven.atlassian.com/content/repositories/atlassian-public</url>
</repository>
...
<dependency>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
</dependency>
...
<plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
    <version>1.1</version>
    <configuration>
        <serverId>jira-repo</serverId>
        <resourceSrc>
            ${project.build.directory}/${project.build.finalName}.${project.packaging}
        </resourceSrc>
        <resourceDest>opt/jira/webapps</resourceDest> <!-- note: no leading slash -->
        <url>scp://root@jira</url>
    </configuration>
</plugin>
...

~/.m2/settings.xml:

...
<servers>
  <server>
    <id>jira-repo</id>
    <username>myusername</username>
    <password>mypassword</password>
  </server>
</servers>
...

然后运行的命令:(-X是调试)

mvn -X upload:upload

总结的一些细答复: 行家 目的是建立模块和复制的结果给一个专家库。任何复制的模块的部署/安装-输入目录必须做到的范围之外行家的核心功能,例如与Ant/家 复制 命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top