Maven父POM

6

我是Maven的新手,最近安装了Nexus。现在我想创建一个父POM,以便我的公司内所有项目都可以使用它。这是我的父POM。

<?xml version="1.0" encoding="UTF-8"?>
<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>1.0.0</modelVersion>
    <groupId>com.mycomp</groupId>
    <artifactId>parent-pom-android</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>Android Parent POM</name>

    <repositories>
        <repository>
            <id>nexus-repo</id>
            <url>http://10.10.10.230:8081/nexus/content/groups/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus-repo</id>
            <name>confiz-repo</name>
            <url>http://10.10.10.230:8081/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
 </project>

现在,我应该把这个 POM 文件放在哪里,以便我的其他 POM 文件可以从中继承呢?
4个回答

11
如果您将此父POM放在名为android的文件夹中,并像这样将使用它的项目放在同一文件夹中。
  • Android
  • pom.xml
  • android-project-1
    • pom.xml
然后,项目pom.xml可以通过将以下内容放置在其pom.xml顶部来使用父pom:
<parent>
    <groupId>parent.group</groupId>
    <artifactId>parent.artifact</artifactId>
    <version>${version.number}</version>
    <relativePath>../</relativePath>
</parent>

你可以将此架构在未来进行扩展,如下所示:

  • 移动端
    • pom.xml
    • Android
      • pom.xml
      • android-project-1
      • android-project-2
    • iPhone
      • pom.xml
      • iphone-project-1

这使您能够为 Android 项目定义常见配置,为 iPhone 项目定义常见配置,并为所有移动项目定义常见配置等等。


4
你需要将项目部署到内部Maven存储库。要做到这一点,首先需要配置一个Maven存储库服务器(我建议使用Apache Archiva),然后将pom.xml和settings.xml指向该服务器:http://archiva.apache.org/docs/1.4-M3/userguide/deploy.html
部署后,您可以将公司中的所有项目指向使用该POM作为父POM。您可以使用相同的策略创建内部项目依赖关系。在持续集成环境中非常有效。

我已经安装了 Nexus,并将 parent-pom.xml 上传到了 Nexus 中。我该如何指定我的项目 pom 从 Nexus 存储库中读取 pom? - AndroidDev
1
你需要配置你的pom.xml和settings.xml文件来使用那个仓库。这里有一些信息:https://support.sonatype.com/entries/21283268-configure-a-maven-build-to-publish-to-nexus - Gilberto Torrezan
对我来说,这听起来像是一个先有鸡还是先有蛋的问题。父POM定义了自定义仓库,但客户端必须从仓库获取父POM。 - Robert
@Robert 不是很准确,settings.xml 文件只存在于你的本地配置中。 - Gilberto Torrezan

2
包装类型应该是pom而不是apk

1
对于每个子POM,请放置一个指向父POM的引用。
<parent>
    <groupId>com.mycomp</groupId>
    <artifactId>parent-pom-android</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>relative/path/to/parent/pom</relativePath>
</parent>

relativePath是从子POM开始计算的


如果父POM在Nexus中,并且settings.xml已配置为使用内部Nexus,则无需使用相对路径。当您有多个存储在一起并具有共同父POM的版本控制项目时,相对路径非常有用。然后,父POM不在Nexus中,而是与项目组一起在版本控制中。 - Lee Meador

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接