1

我是 Maven 新手,并试图了解如何发布我的项目。我在 svn 中有以下项目设置:

trunk
  |-deployer
  |    |-pom.xml
  |-webapp
  |    |-pom.xml
  |-utils      
       |-pom.xml

在开发webapp时,我总是想针对 utils 的最新快照版本进行开发,因此我通过以下方式在 webapp/pom.xml 中声明了对 utils 的依赖:

com.company utils 1.0-SNAPSHOT

Webapp 本身目前的版本也是 1.0-SNAPSHOT。它的 pom.xml 有声明:

<artifactId>webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Sample Webapp</name>

所以一切都很好,但现在我想发布我的软件。在部署程序中,我在 pom.xml 中有以下内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.company</groupId>
  <artifactId>deployer</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Project Release</name>

  <modules>
    <module>externals/webapp</module>
  </modules>

  <properties>
    <url.svn>http://<my-server>/<project>/trunk</url.svn>
  </properties>
  <scm>
    <connection>scm:svn:${url.svn}</connection>
  </scm>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <tagBase>
            http://<my-server>/<project>/tags
          </tagBase>
        </configuration>
      </plugin>

    </plugins>
  </build>

  <distributionManagement>
    <repository>
      <id>Releases</id>
      <name>Releases</name>
      <url>http://<nexus-server>/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
      <id>Snapshots</id>
      <name>Snapshots</name>
      <url>http://<nexus-server>/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
  </distributionManagement>

</project>

在部署程序文件夹本身中,我有一个名为“externals”的文件夹,它设置了一个 svn-externals 来检查我的 webapp 项目(我添加了这个,因为 maven 抱怨找不到它),所以我的模块路径应该是正确的。

问题

1.)我想发布我的网络应用程序的一个版本,但是当我在我的部署器项目中运行一个mvn release:preparemvn release:perform时,我唯一有形的输出是我在 svn 中标记的主干和一个上传到我的 nexus 存储库的 pom。这是有道理的,因为我的部署器工件包装是“pom”类型,但它也没有完成让我与我的 webapp 发生战争的工作(我应该在这里注意,如果在 webapp 项目中单独发布不过,我会得到战争)。我需要发布多个模块,所以我认为我可以使用部署程序项目中的 Maven 聚合来完成此任务,但它似乎不起作用。

2.)有没有更好的方法来实现我想要做的事情?

感谢您提供的任何见解。

4

2 回答 2

2

您应该针对您打算发布的每个模块运行 maven-release-plugin。我从未见过有人有一个特殊的“部署程序”模块来发布其他模块,这不是通常的做法。

通常要发布 webapp 模块,您将针对 webapp 模块运行命令,而要发布 utils 模块,您将针对 utils 模块运行命令。

如果您有一个将 webapp 和 util 联系在一起的父模块,那么我相信您可以针对它运行发布命令。

于 2012-09-05T20:56:05.857 回答
0

正如 matt b 所说,只需在顶部 pom 中添加一个 maven-release-plugin 条目可能会满足您的需求。如果你想将几个工件收集到一个适当的发布包中,你想为此创建一个模块,但是你想查看 maven 程序集插件。它可以将各种 jars(来自模块或外部依赖项)和资源收集到目录、zip 文件或类似文件中。

于 2012-09-05T22:23:57.373 回答