Maven 2 马文超级POM

Maven 2 马文超级POM,maven-2,pom.xml,Maven 2,Pom.xml,我是Maven的新手,正在为我的公司创建一个构建。我们不想连接到Maven中央存储库,我们的src和测试代码的目录结构与super pom中指定的不同。我想处理这个问题的最好方法是创建一个客户超级pom,但我想知道——我应该把超级pom放在哪里,这样我的项目pom就可以引用它了?它是否放在存储库的某个地方?如果是,在哪里 谢谢, Jeff我的建议是创建一个父POM,项目可以从中派生设置。这个父POM只是另一个Maven 2项目,但类型是“POM”而不是“jar” 例如,您可以有这样的父pom:

我是Maven的新手,正在为我的公司创建一个构建。我们不想连接到Maven中央存储库,我们的src和测试代码的目录结构与super pom中指定的不同。我想处理这个问题的最好方法是创建一个客户超级pom,但我想知道——我应该把超级pom放在哪里,这样我的项目pom就可以引用它了?它是否放在存储库的某个地方?如果是,在哪里

谢谢,
Jeff

我的建议是创建一个父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>
<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>

4.0.0
com.company.projectname
项目名称
聚甲醛
1
项目名称
朱尼特
朱尼特
4.5
测试
此属性在所有子项目中都可用
此属性在所有子项目中都可用
此属性在所有子项目中都可用
该项目的子项目可能是这样的:

<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>
<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>

项目名称
com.company.projectname
1
4.0.0        
子项目
罐子
子项目
我的孩子计划

您在父POM中声明的所有内容现在都在子POM中可用。在关于的示例中,子项目将自动提供JUnit依赖项。这样做还将确保与每个开发人员都必须在Maven安装的super POM上乱搞相比,环境会自动配置。

您可能是对的,在这种情况下,super POM是一种可行的方法。至于放在哪里,您将需要创建一个本地maven存储库,并允许开发人员访问它。以下是一些有用(和免费)的程序:

  • 人工制品()
  • 关系()
  • 阿奇瓦(http://archiva.apache.org/)
一旦存储库开始运行,您需要让每个开发人员修改他们的settings.xml,以引用您设置的新存储库服务器。您创建的超级pom将部署在存储库中,因此一旦配置为使用它,maven就会自动将超级pom拉下来

以下是artifactory生成的settings.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?> <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <profiles> <profile> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>all</name> <url>https://server.mycompany.com/artifactory/all</url> </repository> <repository> <snapshots /> <id>snapshots</id> <name>all</name> <url>https://server.mycompany.com/artifactory/all</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>all</name> <url>https://server.mycompany.com/artifactory/all</url> </pluginRepository> <pluginRepository> <snapshots /> <id>snapshots</id> <name>all</name> <url>https://server.mycompany.com/artifactory/all</url> </pluginRepository> </pluginRepositories> <id>artifactory</id> </profile> </profiles> <activeProfiles> <activeProfile>artifactory</activeProfile> </activeProfiles> </settings> 假的 中心的 全部的 https://server.mycompany.com/artifactory/all 快照 全部的 https://server.mycompany.com/artifactory/all 假的 中心的 全部的 https://server.mycompany.com/artifactory/all 快照 全部的 https://server.mycompany.com/artifactory/all 人工制品 人工制品