2009-06-12 14 views
8

Sono nuovo di Maven e sto lavorando alla creazione di una build per la mia azienda. Non vogliamo connetterci al Maven Central Repository e abbiamo una diversa struttura di directory per src e test code rispetto a quella specificata nel super pom. Ho pensato che il modo migliore per gestirlo fosse quello di creare un super-cliente, ma mi chiedo - dove metterò il super-pom in modo che i miei progetti possano farne riferimento? Va nel repository da qualche parte? Se sì, dove?Maven Super POM

Grazie, Jeff

risposta

16

Il mio suggerimento è che si crea un POM genitore da cui i vostri progetti possano derivare le impostazioni. Questo genitore POM è semplicemente un altro progetto di Maven 2, ma con il tipo "pom" invece di "jar".

Ad esempio, si potrebbe avere un pom genitore come questo:

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

e un bambino del progetto potrebbe assomigliare a questo:

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

Tutto ciò che si dichiara in POM genitore è ora disponibile nel pom pom. Nell'esempio su, il progetto figlio avrà automaticamente la dipendenza JUnit disponibile. In questo modo, inoltre, si assicurerà che l'ambiente venga calcolato automaticamente rispetto a se ogni sviluppatore dovesse gironzolare con il super-POM della propria installazione di Maven.

3

Probabilmente hai ragione, un super-pom è la strada da percorrere in questa situazione. Per quanto riguarda dove lo metti, dovrai creare un repository di maven locale e consentire agli sviluppatori di accedervi. Qui ci sono alcuni programmi utili (e libero):

volta si ottiene un repository in esecuzione, è necessario che ogni sviluppatore modifichi le proprie impostazioni.xml per fare riferimento al nuovo server di repository che è stato configurato. Il super-pom che creerai verrà distribuito nel repository, quindi una volta che sono configurati per usarlo, allora Maven estrarrà automaticamente il super-pom.

Ecco un esempio di un file generato settings.xml 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> 
Problemi correlati