2012-03-24 7 views
2

Ich benutze Eclipse Indigo mit m2e (die eine externe binäre von Maven 3.0.3 verbindet).Three-Level-Pom (Firma - Projekt - Modul) - Probleme mit Modul-Projekt (en)

Gerade jetzt, die beabsichtigte Struktur meiner Anwendung ist wie folgt:

Company-parent 
--Project-parent 
----Module1 
----Module2 
----ModuleN 

ich mein Poms so eingerichtet, dass Unternehmen erziehende das Projekt von Project-Eltern ist, und Projekt-Eltern ist die Mutter von alle Module. Die Firma-Eltern und die Projekt-Eltern scheinen in Ordnung zu sein. Beide sind vom Verpackungstyp POM.

Die dritte Ebene ist, wo ich anfange, Probleme zu begegnen. Ich bekomme eine Vielzahl von Maven-Fehlern und allerlei seltsames Verhalten, sogar mit den einfachsten definierten Modulprojekten.

Firma parent:

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.scoresecret</groupId> 
    <artifactId>scs-global-parent</artifactId> 
    <version>1</version> 
    <packaging>pom</packaging> 

</project> 

Projekt parent:

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <artifactId>scs-global-parent</artifactId> 
    <groupId>com.scoresecret</groupId> 
    <version>1</version> 
    </parent> 

    <artifactId>scs-model-parent</artifactId> 
    <groupId>com.scoresecret.model</groupId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
    <module>scs-model-core</module> 
    </modules> 

</project> 

Modul pom:

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
    <artifactId>scs-model-parent</artifactId> 
    <groupId>com.scoresecret.model</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>scs-model-core</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

kann ich „Maven nicht -> Update Projektkonfiguration "Denn wenn ich es tue, bekomme ich dieser Fehler:

Failure to find org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3 in https://my.archiva.location/archiva/repository/internal was cached in the local repository, resolution will not be reattempted until the update interval of scs.internal has elapsed or updates are forced pom.xml /scs-model-core line 1 Maven Configuration Problem 

Einige andere Fehler Ich erhalte:

Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.4.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.4.3 pom.xml /scs-model-core line 1 Maven Build Problem 

Auch eine Fehlermeldung über M2e Empfang eines meiner Ziele Plugin (von der Unternehmensebene pom) innerhalb des Moduls zu ignorieren. Fehle ich etwas Offensichtliches hier? Hilfe!

Thanks :)

Antwort

0

Es stellte sich heraus, dass mein lokales Repo Dateien enthielt, die mit der Erweiterung ".lastUpdated" enden ... das war, weil ich Probleme mit der Authentifizierung hatte, als ich versuchte, meine Maven - Passwörter zu verschlüsseln Abhängigkeiten. Ich löschte diese Dateien und lief einfach "Maven> Update Dependencies" und es funktionierte kein Problem, die fehlenden Ressourcen von meinem Artefakt-Repository herunterladen.

0

Sie sollten die Eltern pom mit expliziten Pfad verweisen: jedes Mal, wenn es

<parent> 
    <artifactId>scs-model-parent</artifactId> 
    <groupId>com.scoresecret.model</groupId> 
    <version>1.0-SNAPSHOT</version> 
    <relativePath>../pom.xml</relateivePath> 
</parent> 

Andernfalls müssen Sie die übergeordnete pom in das Repository ändern neu zu installieren.

+0

können Sie etwas mehr erarbeiten, o Warum sollte ich den Projekt-Elternteil mit relativem Pfad referenzieren? Denken Sie daran, ich verwende keine flache Projektstruktur, das Modell-Kernprojekt ist ein Ordner innerhalb des Modell-Elternteils. –

+1

Wenn Sie dies nicht tun, wird der Pom aus Repo abgerufen. –

+0

Ahh, ich verstehe. Macht sehr logisch Sinn. Ich fange an, dieses Maven-Ding zu bekommen und es fühlt sich großartig an !! Danke!! –

0

Klingt wie Maven nicht in der Lage ist ein Plugin (org.apache.maven.plugins: Maven-Ressourcen-Plugin: pom: 2.4.3) zum Download aus dem Repository https://my.archiva.location/archiva/repository/internal

Failure org zu finden. apache.maven.plugins: maven-resources-plugin: pom: 2.4.3 in https://my.archiva.location/archiva/repository/internal wurde im lokalen Repository zwischengespeichert, die Auflösung wird nicht wiederholt, bis das Aktualisierungsintervall von scs.internal abgelaufen ist oder Aktualisierungen pom.xml/scs erzwungen werden -model-core line 1 Maven-Konfigurationsproblem

Wenn Sie diese URL in einem Browser anzeigen, gibt es sie? Ich sehe, dass es https verwendet - benötigen Sie ein Client-Zertifikat oder eine Form von grundlegenden Authentifizierungsdaten, um auf diese URL zuzugreifen?

Was sind Ihre aktuellen Einstellungen in Ihrer .m2/settings.xml Show für Repositories? Sind Sie hinter einer Unternehmensfirewall oder nicht mit dem Internet verbunden, was Sie zwingt, sich mit einem nicht standardmäßigen maven central repository zu verbinden?

+0

Danke für die Einsicht, es hat mir geholfen, das Problem zu lösen. Jetzt meine eigene Antwort schreiben. –

3

Sie sollten die Artefakte nicht wie in einer Verzeichnisstruktur beschrieben haben.

+-- Company-parent (pom.xml) 
     +-- Project-parent (pom.xml) 
      +----Module1 (pom.xml) 
      +----Module2 (pom.xml) 
      +----ModuleN (pom.xml) 

Um eine wirklich gute Verwendung von Ihnen unternehmensübergeordneten (pom.xml) macht es helt in einen abgetrennten Bereich in der Versionskontrolle sein sollte, und separat in Ihrem Repository Manager (Nexus, artifactory, Archiva veröffentlicht ...). Dies wird in der folgenden Struktur führen:

+-- Company-parent (pom.xml) (Separate Project) 

Die Unternehmen-Eltern sollten so oft wie über die Release-Plugin benötigt freigegeben werden. Nehmen wir an, wir haben Version 1.0 der Firma-Eltern freigegeben. Der Grund, es zu trennen, ist, weil das Unternehmen-Elternteil von vielen Projekten und nicht nur von einem einzelnen Projekt verwendet wird.

und die eigentlichen Projekte sollten in einem separaten Ordner (auch in der Versionskontrolle) gestellt werden:

+-- Project-parent (pom.xml) 
    +----Module1 (pom.xml) 
    +----Module2 (pom.xml) 
    +----ModuleN (pom.xml) 

So hat das Unternehmen Erziehende in Ihrem Projekt zu verwenden das Projekt-Eltern wie auszusehen hat:

<project....> 
<modelVersion>4.0...</modelVersion> 

<parent> 
    <artifactId>company-parent</artifactId> 
    <groupId>com.company.base</groupId> 
    <version>1.0</version> 
</parent> 

<packaging>pom</packaging> 

<groupId>com.company.project1</groupId> 
<artifactId>project-parent</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
... 
<dependencyManagement> 
<!-- Project specific dependencies --> 
</dependencyManagement> 
<build> 
    <pluginManagement> 
    <plugins> 
     <!-- Project specific plugins. Better use them of the company pom --> 
    </plugins> 
    </pluginManagement> 
</build> 
<modules> 
    <module>module1</module> 
    <module>module2</module> 
    <module>moduleN</module> 
</modules> 
.. 

Nun lassen Sie uns einen Blick in ein Modul nehmen, die wie folgt aussehen:

<project....> 
<modelVersion>4.0...</modelVersion> 

<parent> 
    <artifactId>project-parent</artifactId> 
    <groupId>com.company.project1</groupId> 
    <version>1.0.0-SNAPSHOT</version> 
</parent> 

<packaging>jar</packaging> 

<artifactId>module1</artifactId> 

<dependencies>...</dependencies> 
<build>..</build> 
+0

Es ist, wie Sie beschrieben haben, ich hatte es gerade so aufgelistet, um die Hierarchie zu zeigen. Das Firmenelternteil befindet sich in seinem eigenen Bereich in scm, es ist ein eigener Arbeitsbereich in Eclipse und wird durch mein Artefakt (und dann lokales) Repo –

+1

gelöst. Aber Ihr Unternehmen pom sollte sich an einem anderen Ort in Versionskontrolle befinden, weil es ein unabhängiges Artefakt ist. Verwenden Sie einen Repository-Manager (Nexus, Artefakt oder Achiva). – khmarbaise

+0

+1 Zur Hervorhebung der Wichtigkeit der Veröffentlichung eines Unternehmens-POM in einem Unternehmens-Repository. –