Java Maven:如何将工件复制到特定目录?

Java Maven:如何将工件复制到特定目录?,java,maven,jboss,Java,Maven,Jboss,“安装”目标将工件复制到目标目录和本地存储库 我如何告诉Maven将其也复制到给定的目录(例如JBoss的deploy目录)。如果您想将文件复制到Web服务器(本地或远程),可以使用Maven upload plugin: <plugin> <groupId>com.atlassian.maven.plugins</groupId> <arti

“安装”目标将工件复制到目标目录和本地存储库


我如何告诉Maven将其也复制到给定的目录(例如JBoss的deploy目录)。

如果您想将文件复制到Web服务器(本地或远程),可以使用Maven upload plugin:

                <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>
顺便说一下,对于远程部署,您可能需要scp的登录密码才能工作。您必须将它们添加到Maven settings.xml文件中:

<settings>
  ...
  <servers>
    <server>
      <id>ENV_val</id>
      <username>login</username>
      <password>password</password>
    </server>
  </servers>
  ...
</settings>

...
环境
登录
密码
...
maven dependency插件的目标是实现您想要的,请参阅

然而,复制目标目录之外的任何内容(或者准确地说是
${project.build.directory}
)不是一个好主意,尤其是如果这样的操作附加到构建阶段,因为它会引入构建的意外副作用,有时甚至会丢失再现性


正如@Andreas_D所指出的,对于JBoss部署目的,有一个更好的选择;类似地,部署到其他应用程序服务器。

最好的方法是使用一个插件来实际部署您的应用程序,例如or(这一点归功于@Andreas\D)

这将是一种更好的使用拷贝或通用上传工具的方法,因为部署是您实际要做的事情

使用cargo插件,您可以选择。在构建过程中,我们采用这种方法在jetty中使用进行本地测试,并有一个概要文件可通过cargo按需部署到tomcat

注意:如果您的目标服务器(JBOSS)也本地安装在dev box上,那么您也可以在构建过程中使用cargo启动/停止服务器。这种方法的缺点是,您需要它来引用它在pom文件中的位置,因此所有开发人员要么将其安装在同一位置,要么将其安装在定义其位置的系统属性中(类似于JAVA_HOME)。

根据需要,您可以将刚构建的工件复制到特定目录:

<project>
    [...]
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>copy-installed</id>
              <phase>install</phase>
              <goals>
                <goal>copy</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <type>${project.packaging}</type>
                  </artifactItem>
                </artifactItems>
                <outputDirectory>some-other-place</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    [...]
  </project>

[...]
org.apache.maven.plugins
maven依赖插件
2.8
复制安装
安装
复制
${project.groupId}
${project.artifactId}
${project.version}
${project.packaging}
其他地方
[...]

对于jboss来说,不需要复制文件来部署目录-这是一个很好的解决方案。但是jboss“特殊maven插件”的可靠性有点令人怀疑。这相当于jboss maven插件的硬部署目标否决了这个答案,因为它没有回答OP提出的具体问题,这就是如何复制工件。OP并没有要求其他选择。
mvn upload:upload -Pdeveloppement
<settings>
  ...
  <servers>
    <server>
      <id>ENV_val</id>
      <username>login</username>
      <password>password</password>
    </server>
  </servers>
  ...
</settings>
<project>
    [...]
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>copy-installed</id>
              <phase>install</phase>
              <goals>
                <goal>copy</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <type>${project.packaging}</type>
                  </artifactItem>
                </artifactItems>
                <outputDirectory>some-other-place</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    [...]
  </project>