8

我是 Maven 的新手,正在为我的公司创建一个构建。我们不想连接到 Maven 中央存储库,并且我们的 src 和测试代码的目录结构与超级 pom.xml 中指定的不同。我认为处理此问题的最佳方法是创建一个客户超级 pom,但我想知道 - 我实际上将超级 pom 放在哪里以便我的项目 pom 可以引用它?它会在某个地方的存储库中吗?如果有,在哪里?

谢谢,杰夫

4

2 回答 2

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 相比,以这种方式进行操作还可以确保自动计算环境。

于 2009-06-12T13:38:03.390 回答
3

你可能是对的,在这种情况下,超级 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>
</设置>
于 2011-03-01T14:09:28.213 回答