Domanda
Sono nuovo di Maven e lavorando sulla creazione di una build per la mia azienda. Non vogliamo per la connessione verso il Maven centrale Repository, e noi abbiamo una struttura di directory diversa per src e testare il codice di quanto specificato nel super pom. Ho pensato che il modo migliore per gestire questa situazione è quello di creare un cliente super-pom, ma mi chiedo - dove posso effettivamente messo le super-pom pon così i miei progetto può fare riferimento a esso? Va a finire nel repository da qualche parte? Se sì, dove?
Grazie, Jeff
Soluzione
Il mio suggerimento è che si crea un POM genitore da cui i vostri progetti possano derivare le impostazioni. Questo POM genitore è semplicemente un altro 2 del progetto Maven, ma con il tipo "POM" invece di "vaso".
Per esempio, si potrebbe avere un pom genitore in questo modo:
<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 figlio 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 bambino. Nell'esempio su, il progetto bambino avrà automaticamente la dipendenza JUnit disponibili. Farlo in questo modo garantirà inoltre che l'ambiente è figurato automaticamente rispetto a se ogni sviluppatore dovrebbe pasticciare con il super POM della loro installazione Maven.
Altri suggerimenti
Si sono probabilmente corrette, un super-pom è la strada da percorrere in questa situazione. Quanto a dove lo metti, è necessario creare un repository Maven locale e fornire agli sviluppatori l'accesso ad essa. Qui ci sono alcuni programmi utili (e libero):
- Artifactory ( http://www.jfrog.com/products.php )
- Nexus ( http://nexus.sonatype.org/ )
- Archiva (http://archiva.apache.org/)
Una volta che si ottiene un repository di un esecuzione, è necessario disporre di ogni sviluppatore modificare la loro settings.xml per fare riferimento al nuovo server repository che avete installato. Il pom super-si crea verrà distribuito nel repository, quindi una volta che sono configurati per utilizzare, quindi Maven tirerà automaticamente il super pom.
Ecco un esempio di un file di Artifactory generato 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>