2009-06-12 22 views
8

Soy nuevo en Maven y estoy trabajando en la creación de una compilación para mi empresa. No deseamos conectarnos al Repositorio central de Maven, y tenemos una estructura de directorios diferente para src y código de prueba que la especificada en el super pom. Pensé que la mejor manera de manejar esto es crear un súper pom del cliente, pero me pregunto: ¿dónde pongo realmente el super pom para que mis poms del proyecto puedan hacer referencia a él? ¿Va en el repositorio a alguna parte? ¿Si es así, donde?Maven Super POM

Gracias, Jeff

Respuesta

16

Mi sugerencia es que se crea un POM madre de la que sus proyectos pueden obtener su configuración. Este POM padre es simplemente otro proyecto de Maven 2, pero con el tipo "pom" en lugar de "jar".

Por ejemplo, usted podría tener un pom padres así:

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

Y un niño del proyecto podría tener este aspecto:

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

Todo lo que se declara en el POM padre es ahora disponible en el pom de niño. En el ejemplo sobre, el proyecto secundario tendrá automáticamente la dependencia JUnit disponible. Hacerlo de esta manera también asegurará que el entorno se calcule automáticamente en comparación con si cada desarrollador tuviera que meterse con el super POM de su instalación de Maven.

3

Probablemente sea cierto, un súper-pom es el camino a seguir en esta situación. En cuanto a dónde lo pones, necesitarás crear un repositorio maven local y darles a los desarrolladores acceso a él. Aquí están algunos programas útiles (y gratuitas):

vez Si obtiene un repositorio en ejecución, necesitará que cada desarrollador modifique su configuración.xml para hacer referencia al nuevo servidor de repositorio que ha configurado. El super pom que crees se desplegará en el repositorio, por lo que una vez que estén configurados para usarlo, maven extraerá automáticamente el super pomo.

Aquí es un ejemplo de un archivo settings.xml generada Artifactory:

 
<?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> 
Cuestiones relacionadas