我是 Maven 的新手,正在为我的公司创建一个构建。我们不想连接到 Maven 中央存储库,并且我们的 src 和测试代码的目录结构与超级 pom.xml 中指定的不同。我认为处理此问题的最佳方法是创建一个客户超级 pom,但我想知道 - 我实际上将超级 pom 放在哪里以便我的项目 pom 可以引用它?它会在某个地方的存储库中吗?如果有,在哪里?
谢谢,杰夫
我的建议是您创建一个父 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 相比,以这种方式进行操作还可以确保自动计算环境。
你可能是对的,在这种情况下,超级 pom 是要走的路。至于你把它放在哪里,你需要创建一个本地 maven 存储库并让开发人员访问它。以下是一些有用(免费)的程序:
一旦您启动了一个存储库,您将需要让每个开发人员修改他们的 settings.xml 以引用您设置的新存储库服务器。您创建的超级 pom 将部署在存储库中,因此一旦配置为使用它,maven 将自动拉下超级 pom。
以下是人工生成的 settings.xml 文件的示例:
<?xml 版本="1.0" 编码="UTF-8"?> <设置 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"> <个人资料> <个人资料> <存储库> <存储库> <快照> <启用>假</启用> </快照> <id>中央</id> <name>全部</name> <url>https://server.mycompany.com/artifactory/all</url> </repository> <存储库> <快照/> <id>快照</id> <name>全部</name> <url>https://server.mycompany.com/artifactory/all</url> </repository> </存储库> <pluginRepositories> <插件库> <快照> <启用>假</启用> </快照> <id>中央</id> <name>全部</name> <url>https://server.mycompany.com/artifactory/all</url> </pluginRepository> <插件库> <快照/> <id>快照</id> <name>全部</name> <url>https://server.mycompany.com/artifactory/all</url> </pluginRepository> </pluginRepositories> <id>神器</id> </profile> </profiles> <活动配置文件> <activeProfile>工件</activeProfile> </activeProfiles> </设置>