我是Maven的新手,正在为我的公司创建一个版本。我们不想连接到Maven Central Repository,我们有一个不同于src和测试代码的目录结构,而不是super pom中指定的。我认为处理这个问题的最佳方法是创建一个客户超级pom,但我想知道 - 我在哪里实际放置超级pom所以我的项目poms可以引用它?它是否在某个存储库中存在?如果是这样,在哪里?
谢谢, 杰夫
答案 0 :(得分: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>
该项目的孩子可能看起来像这样:
<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>
您在父POM中声明的所有内容现在都可以在子pom中使用。在示例中,子项目将自动具有JUnit依赖项。以这种方式执行此操作还将确保自动计算环境,与每个开发人员是否必须使用其Maven安装的超级POM相混淆。
答案 1 :(得分:3)
你可能是正确的,超级pom是这种情况下的方法。至于你把它放在哪里,你需要创建一个本地maven存储库并让开发人员访问它。以下是一些有用(和免费)的程序:
在运行存储库之后,您需要让每个开发人员修改其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>