Maven Super POM

Jef*_*rey 8 maven-2 pom.xml

我是Maven的新手,正在为我的公司创建一个版本.我们不想连接到Maven Central Repository,我们有一个不同于src和测试代码的目录结构,而不是super pom中指定的.我认为处理这个问题的最佳方法是创建一个客户超级pom,但我想知道 - 我在哪里实际放置超级pom所以我的项目poms可以引用它?它是否在某个存储库中存在?如果是的话,在哪里?

谢谢,杰夫

All*_*sen 16

我的建议是你创建一个父POM,你的项目可以从中派生出你的设置.这个父POM只是另一个Maven 2项目,但是类型为"pom"而不是"jar".

例如,您可以像这样使用父pom:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.projectname</groupId>
    <artifactId>projectname</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>projectname</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <superprop1>this property is available in all child projects</superprop1>
        <superprop2>this property is available in all child projects</superprop2>
        <superprop3>this property is available in all child projects</superprop3>
    </properties>
</project>
Run Code Online (Sandbox Code Playgroud)

该项目的孩子可能看起来像这样:

<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">
    <parent>
        <artifactId>projectname</artifactId>
        <groupId>com.company.projectname</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>        
    <artifactId>child-project</artifactId>
    <packaging>jar</packaging>
    <name>child-project</name>
    <description>
        My child project
    </description>
</project>
Run Code Online (Sandbox Code Playgroud)

您在父POM中声明的所有内容现在都可以在子pom中使用.在示例中,子项目将自动具有JUnit依赖项.以这种方式执行此操作还将确保自动计算环境,相比之下,每个开发人员是否必须使用其Maven安装的超级POM.