4

摘要:如何使用 Maven 将一些生成的文件复制到网络服务器(例如 IIS 或 Apache)目录中?

详细信息:我有一个在 Maven 中构建的工作应用程序。我已经设法使用webstart-maven-plugin构建它,它在一个目录中生成所有需要的文件(.jar 和 .jnlp)target/jnlp。它还会创建一个 zip 文件,其中包含所有内容target/foo-1.0.zip

目前 webstart 插件没有deploy目标 - 对它的请求最终出现在常见问题解答(问题 3)上。将来可能会实现,但暂时建议使用wagon-maven-plugin

我从来没有用过Wagon。首先,我只想将文件复制到网络服务器提供的本地目录中。稍后我想远程复制它们,可能使用 ftp。有人可以举例说明我需要添加什么以pom.xml使本地副本正常工作(希望也是一个 ftp 示例?)。我在文档中找不到它。从阅读中我认为我可能还需要Wagon Maven 文件提供程序,但由于这似乎几乎没有文档,我不确定。

4

2 回答 2

6

Wagon 提供商只提供额外的网络协议支持(例如 FTP)。

如果要将文件复制到网络服务器(本地或远程),可以使用 Maven 上传插件:

...
<plugin>
    <groupId>com.atlassian.maven.plugins</groupId>
    <artifactId>maven-upload-plugin</artifactId>
</plugin>
...

在父 pom 中:

            <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 配置文件(在父 pom 中):

<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 view 下单击来使用它:

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

编辑:您需要添加 Atlassian 存储库:

    <pluginRepositories>
    <pluginRepository>
        <id>Atlassian</id>
        <url>https://maven.atlassian.com/repository/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>   

编辑:根据远程协议,您必须添加 wagon 扩展,请参阅使用 sftp 和 Maven 上传目录

于 2011-06-09T11:34:40.973 回答
3

最后我没有使用 Maven 上传插件——它似乎有点受限,并且不是主要的 Maven 发行版的一部分。我按照建议使用了 maven wagon 插件。这是我可以使它起作用的最简单的pom。希望其他人会发现它有用,因为我无法轻易找到类似的东西。

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>wagon-maven-plugin</artifactId>
    <version>1.0-beta-3</version>
    <configuration>
      <fromDir>${project.build.directory}/jnlp</fromDir>
      <includes>*</includes>
      <url>file://c:/inetpub/wwwroot</url>
      <toDir>jnlp</toDir>
    </configuration>
  </plugin>

对于远程分发,您只需更改 URL 类型,并可能根据需要添加 wagon 扩展。

于 2011-06-09T13:04:53.327 回答