如何使用Maven进行部署?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我有4个使用Maven嵌套子项目的项目的任务:

  1. 对于每个子:jar-up资源目录包括项目依赖关系
  2. 上移到父项目
  3. 使用单个命令将所有创建的存档提取到各种远程目标(完全安装)中,可以包括http服务器,应用程序服务器,文件服务器等(主要是* NIX)。目的地是在子项目级别提供的
  4. 还应该可以从单个子项目中解压缩/复制(部分安装)

文件不是Java - 主要是各种脚本和HTML

我正在寻找各种插件来帮助完成任务:程序集,依赖关系,antrun,解压缩。依赖关系看起来很有希望,但我需要解压缩不仅依赖性jar而且还有(子)项目内容。另外,由于我无法真正将操作紧缩到Maven生命周期,我将如何触发远程安装?mvn依赖:解压?这不是很具描述性或直观性。是否可以创建一个自定义目标(例如项目:安装)而无需编写插件?

使用Maven是公司的标准,所以请不要提供替代品 - 我几乎坚持我所拥有的

提问于
用户回答回答于

好的,我认为以下可能会做你需要的。这种方法的缺点是,随着后续构建的执行,每个部署之间会有间隔。这可以接受吗?

在每个项目中定义一个具有相同名称的配置文件(比如说“发布”)。在该配置文件中,你可以定义配置以使用antrun-plugin通过FTP传输文件(请参见下文)。

在父项目中,你将拥有一个模块元素,将每个项目定义为一个模块。如果运行mvn install -P publish,则每个项目都将依次构建,并启用发布配置文件,并在安装阶段将最终的工件发布到目标。如果您需要部署其他文件,请相应地修改包含element

请注意,FTP任务的参数已被设置为属性,这使得它们可以从命令行覆盖和/或从父POM继承。

<profiles>
  <profile>
    <id>publish</id>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <executions>
        <execution>
          <id>ftp</id>
          <phase>install</phase>
          <configuration>
            <tasks>
              <ftp action="send" 
                  server="${ftp.host}" remotedir="${ftp.remotedir}" 
                  userid="${ftp.userid}" password="${ftp.password}" 
                  depends="${ftp.depends}" verbose="${ftp.verbose}">
                <fileset dir="${project.build.directory}">
                  <include 
                    name="${project.build.finalName}.${project.packaging}"/>
                </fileset>
              </ftp>
            </tasks>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
      <dependencies>
        <dependency>
          <groupId>commons-net</groupId>
          <artifactId>commons-net</artifactId>
          <version>1.4.1</version>
        </dependency>
        <dependency>
          <groupId>ant</groupId>
          <artifactId>ant-commons-net</artifactId>
          <version>1.6.5</version>
        </dependency>
        <dependency>
          <groupId>ant</groupId>
          <artifactId>ant-nodeps</artifactId>
          <version>1.6.5</version>
        </dependency>
      </dependencies>
    </plugin>
    <properties>
      <ftp.host>hostname</ftp.host>
      <ftp.remotedir>/opt/path/to/install</ftp.remotedir>
      <ftp.userid>user</ftp.userid>
      <ftp.password>mypassword</ftp.password>
      <ftp.depends>yes</ftp.depends>
      <ftp.verbose>no</ftp.verbose>          
    </properties>
  </profile>
</profiles>
用户回答回答于

在POM下面将有助于将jar文件从项目构建目录复制到远程SFTP / FTP服务器。

  1. 使用命令mvn install -Dftp.password =密码

由于出于安全原因我想从命令提示符传递密码,因此我使用了 -Dftp.password = password 在执行上述命令后,Maven项目目标文件夹中的所有jar文件将部署在server.com上的MAVEN文件夹中

    <plugin>          <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>

    <executions>
        <execution>
            <id>ftp</id>
            <phase>install</phase>
            <configuration>
                <tasks>
                    <scp todir="user@server.com:/MAVEN/"
                        sftp="true" port="22" trust="true" password="${ftp.password}"
                        failonerror="false" verbose="true" passphrase="">
                        <fileset dir="${project.build.directory}">
                            <include name="*.jar" />
                        </fileset>
                    </scp>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-jsch</artifactId>
            <version>1.9.4</version>
        </dependency>
    </dependencies>

</plugin>

扫码关注云+社区