【发布时间】:2012-07-16 18:01:21
【问题描述】:
我正在尝试发布包含在单个 git 存储库中的多模块项目的各个模块。
文件夹结构如下所示:
|- api/pom.xml
|- database/pom.xml
|- core/pom.xml
pom.xml
父 pom 只是用作构建所有子组件的一种方式,这种方式通过使用 <modules> 标记是有意义的。本质上,构建 api,然后是数据库,然后是核心。
该项目最初托管在 SVN 中,只需在 maven scm 标签中指向存储库中的不同路径,就很容易让 maven release 命令玩得很好。 Git似乎不是这种情况。
在运行mvn release:prepare 时,它会根据需要对 api pom 进行更改,但在执行mvn release:perform 时,它会尝试构建父 pom,并且由于无法解析 api-snapshot 依赖关系而无法构建数据库包在 database/pom.xml 中列出。
我应该如何配置我的 scm 标签才能在 Git 存储库中发布特定模块?这甚至可能吗?
编辑:添加 pom 示例
以下是 pom 文件外观的示例设置:
父 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.findwise.hydra</groupId>
<artifactId>hydra-parent</artifactId>
<version>0.2.0</version>
<packaging>pom</packaging>
<modules>
<module>api</module>
<module>database</module>
<module>core</module>
</modules>
</project>
api/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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.findwise.hydra</groupId>
<artifactId>hydra-api</artifactId>
<packaging>jar</packaging>
<version>0.2.0</version>
<name>${project.artifactId}</name>
<description>Hydra API</description>
<licenses>
...
</licenses>
<scm>
...
</scm>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
...
</dependencies>
<build>
<finalName>${project.name}</finalName>
<plugins>
...
</plugins>
</build>
</project>
database pom 看起来很像api,但依赖于api。 core 也是如此,它依赖于database(并通过它依赖于api)。
api 和 database 工件本身很重要,因为 api 定义了客户端 API,database 定义了后端 API,两者都用于与应用程序集成。由此产生了单独发布它们的最初想法——父 pom 只是事后的想法,以允许更简单地构建整个堆栈。
【问题讨论】:
-
您是否在您的 api、数据库或核心模块中使用父标签来引用您父 pom 中的内容?
标签: git maven maven-release-plugin multi-module