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

È stato utile?

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

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top