【发布时间】:2011-10-27 04:02:10
【问题描述】:
“安装”目标将工件复制到目标目录和本地存储库。
我如何告诉 Maven 将它也复制到给定目录(例如 JBoss 的部署目录)。
【问题讨论】:
-
对于 jboss,不需要复制文件来部署目录 - 有一个special maven plugin。
-
然而 jboss“特殊 maven 插件”的可靠性有点值得怀疑。
“安装”目标将工件复制到目标目录和本地存储库。
我如何告诉 Maven 将它也复制到给定目录(例如 JBoss 的部署目录)。
【问题讨论】:
根据http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html,可以将刚刚构建的工件复制到特定目录:
<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>
【讨论】:
最好的方法是使用一个可以实际部署您的应用程序的插件,例如cargo 或jboss-maven plugin(感谢@Andreas_D)。
这将是使用复制或通用上传工具的更好方法,因为部署是您实际尝试做的事情。
使用 cargo 插件,您可以选择deploy to a variety of running servers。我们采用这种方法在构建期间使用jetty plugin 在码头进行本地测试,并通过 cargo 按需部署到 tomcat 的配置文件。
注意:如果您的目标服务器 (JBOSS) 也安装在本地开发盒上,那么您也可以在构建过程中使用 cargo 启动/停止服务器。这种方法的缺点是您需要它来引用它在 pom 文件中的位置,因此所有开发人员都将它安装在同一位置或定义它所在位置的系统属性(类似于 JAVA_HOME)。
【讨论】:
如果您想将文件复制到网络服务器(本地或远程),您可以使用 Maven 上传插件:
<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>
为了以智能的方式配置参数,我使用了 maven 配置文件:
<profiles>
<!-- local deployment -->
<profile>
<id>developpement</id>
<properties>
<jboss.host>localhost</jboss.host>
<jboss.deployDir>appli/jboss-4.0.4.GA/server/default/deploy/</jboss.deployDir>
<jboss.deployUrl>file://C:/</jboss.deployUrl>
</properties>
</profile>
<!-- distant deployment -->
<profile>
<id>validation</id>
<properties>
<jboss.host>ENV_val</jboss.host>
<jboss.deployDir>/home/envval/jboss/server/default/deploy/</jboss.deployDir>
<jboss.deployUrl>scp://PROJECT_LAN_HOST</jboss.deployUrl>
</properties>
</profile>
</profiles>
我创建了一个“ant 启动器”,通过在 Eclipse ant 视图下单击来使用它:
<target name="copy war to JBoss local" description="Copy war to local JBoss">
<maven goal="upload:upload" options="-Pdeveloppement" />
</target>
但你可以简单地在命令行上运行它:
mvn upload:upload -Pdeveloppement
顺便说一下,对于远程部署,您可能需要一个登录密码才能使 scp 工作。您必须将它们添加到您的 Maven settings.xml 文件中:
<settings>
...
<servers>
<server>
<id>ENV_val</id>
<username>login</username>
<password>password</password>
</server>
</servers>
...
</settings>
【讨论】: