【问题标题】:Maven Parent POMMaven 父 POM
【发布时间】:2013-01-18 14:09:21
【问题描述】:

我是 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 文件可以继承它?

【问题讨论】:

    标签: maven pom.xml parent-pom


    【解决方案1】:

    如果你把这个父 pom 放在一个名为 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
      • 安卓
        • pom.xml
        • android-project-1
        • android-project-2
      • iPhone
        • pom.xml
        • iphone-project-1

    这让您可以定义 android 项目的通用配置、iphone 项目的通用配置和所有移动项目的通用配置。以此类推

    【讨论】:

      【解决方案2】:

      您必须将项目部署到内部 Maven 存储库。为此,您首先需要配置一个 Maven 存储库服务器(我建议使用 Apache Archiva),然后将您的 pom.xml 和 settings.xml 指向服务器:http://archiva.apache.org/docs/1.4-M3/userguide/deploy.html

      部署后,您可以将贵公司的所有项目都指向该 pom 作为父 pom。您可以使用相同的策略来创建内部项目依赖项。这在continuous integration 环境中运行良好。

      【讨论】:

      • 我已经安装了nexus并将parent-pom.xml上传到nexus。我怎样才能让我的项目 pom 从 nexus repo 中读取 pom?
      • 您需要配置 pom.xml 和 settings.xml 以使用该存储库。这里有一些信息:support.sonatype.com/entries/…
      • 对我来说听起来像是先有鸡还是先有蛋的问题。父 pom 定义了自定义仓库,但客户端必须从仓库中获取父 pom。
      • @Robert 不是真的,settings.xml 文件是您配置的本地文件。
      【解决方案3】:

      包装类型应为pom 而不是apk

      【讨论】:

        【解决方案4】:

        对于每个子 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 中,而是在项目组的版本控制中。
        猜你喜欢
        • 2010-12-31
        • 2021-10-15
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        • 2013-02-23
        • 2012-05-15
        • 2012-03-17
        相关资源
        最近更新 更多