Maven Super POM - PullRequest
       18

Maven Super POM

8 голосов
/ 12 июня 2009

Я новичок в Maven и работаю над созданием билда для моей компании. Мы не хотим подключаться к центральному репозиторию Maven, и у нас есть другая структура каталогов для src и тестового кода, чем указано в супер-помпе. Я подумал, что лучший способ справиться с этим - создать супер-помпу для покупателя, но мне интересно - куда я на самом деле кладу супер-помпу, чтобы мои проектные пометки могли ссылаться на нее? Это идет в хранилище где-нибудь? Если да, то где?

Спасибо, Джефф

Ответы [ 2 ]

16 голосов
/ 12 июня 2009

Я предлагаю вам создать родительский POM, из которого ваши проекты могут получить ваши настройки. Этот родительский POM - просто другой проект Maven 2, но с типом «pom» вместо «jar».

Например, у вас может быть родительский помпан, подобный этому:

<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. В примере about у дочернего проекта автоматически будет доступна зависимость JUnit. Это также обеспечит автоматическое вычисление среды по сравнению с тем, когда каждому разработчику придется возиться с супер-POM своей установки Maven.

3 голосов
/ 01 марта 2011

Вы, наверное, правы, в этой ситуации лучше всего использовать супер-помпона. Что касается того, куда вы его поместите, вам нужно будет создать локальный репозиторий maven и предоставить разработчикам доступ к нему. Вот несколько полезных (и бесплатных) программ:

После того, как вы запустите репозиторий, вам потребуется, чтобы каждый разработчик изменил свой файл settings.xml для ссылки на новый сервер репозитория, который вы настроили. Созданная вами супер-помпа будет развернута в хранилище, поэтому, как только они будут настроены на ее использование, maven автоматически сбросит супер-помпу.

Вот пример файла 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>
...