2009-06-12 7 views
8

Ich bin neu bei Maven und arbeite daran, einen Build für meine Firma zu erstellen. Wir wollen keine Verbindung zum Maven Central Repository herstellen, und wir haben eine andere Verzeichnisstruktur für src und Testcode als im Super Pom angegeben. Ich dachte, der beste Weg, damit umzugehen, ist, einen Kunden-Superpom zu kreieren, aber ich frage mich - wo setze ich eigentlich den Superpom ein, damit meine Projektpoms darauf verweisen können? Geht es irgendwo in das Repository? Wenn ja, wo?Maven Super POM

Danke, Jeff

Antwort

16

Mein Vorschlag ist, dass Sie eine übergeordnete POM erstellen, aus denen Sie Ihre Projekte Ihre Einstellungen ableiten können. Dieses Eltern-POM ist einfach ein anderes Maven 2-Projekt, aber mit dem Typ "Pom" anstelle von "Jar".

Zum Beispiel könnten Sie eine übergeordnete pom wie diese:

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

Und ein Kind des Projektes könnte wie folgt aussehen: jetzt

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

Alles, was Sie in der übergeordneten POM erklären ist verfügbar in der Kinderpom. In diesem Beispiel wird dem untergeordneten Projekt automatisch die JUnit-Abhängigkeit zur Verfügung gestellt. Auf diese Weise wird auch sichergestellt, dass die Umgebung automatisch verglichen wird, als wenn jeder Entwickler mit dem Super-POM seiner Maven-Installation herumspielen müsste.

3

Sie haben wahrscheinlich Recht, ein Super-Pom ist der Weg in dieser Situation zu gehen. Wofür Sie es verwenden, müssen Sie ein lokales Maven-Repository erstellen und den Entwicklern Zugriff darauf geben. Hier sind einige nützliche (und kostenlose) Programme:

Einmal Wenn Sie ein Repository zum Laufen bringen, müssen Sie jeden Entwickler ihre settings.xml ändern lassen, um auf den neuen Repository-Server zu verweisen, den Sie eingerichtet haben. Der Super-Pom, den Sie erstellen, wird im Repository bereitgestellt, sobald er für die Verwendung konfiguriert wurde, zieht Maven den Super-Pom automatisch herunter. Hier

ist ein Beispiel für eine artifactory erzeugt 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> 
Verwandte Themen