2015-10-22 5 views
6

Ich habe ein Projekt namens Parent. Sein Typ ist POM. Es gibt eine Bibliothek (ojdbc6.jar), die nicht im öffentlichen Repository ist so bin ich es über <SystemPath> Zugriff wie Sie unten pom.xml sehen in kann:Zugriff auf die übergeordnete Projektbibliothek (jar) im untergeordneten Modul nicht möglich - Maven

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.Parent</groupId> 
    <artifactId>Parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>childModule</module> 
    </modules> 

    <dependencies> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc</artifactId> 
      <version>6</version> 
      <scope>system</scope> 
      <systemPath>${basedir}/lib/ojdbc6.jar</systemPath> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${basedir}/lib</url> 
     </repository> 
    </repositories> 

nun das Kind Projektnamen sind Kinder Module1 und Kinder Module2 Verwendung dieser (ojdbc6.jar) Bibliothek Es POM ist ist unten erwähnt:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>testApp</artifactId> 
    <version>1.14.5.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>APP1</name> 
    <description>Application</description> 

    <parent> 
     <groupId>com.Parent</groupId> 
     <artifactId>Parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
</project> 

Beim Erstellen mit Maven gibt es einen Fehler:

Description Resource Path Location Type 
The container 'Maven Dependencies' references non existing library 
'C:\Users\ABCCOMPUTER_NAME\.m2\repository\com\oracle\ojdbc\6\ojdbc-6.jar' 
testApp Build path Problem. 

Warum sieht es im lokalen Repository? Dies geschieht nur, wenn das übergeordnete Projekt eine Bibliothek enthält (jar), die den Systempfad enthält. Es passiert nicht, wenn Bibliothek Pfadsystem (jar) im selben Projekt, wie Eltern Bezug ojdbc6.jar, es ist in Ordnung dort.

+0

Wo befindet sich das Glas relativ zu den Kindern? Die Eigenschaft basedir hat einen anderen Wert im übergeordneten und untergeordneten Element. –

+0

Jar befindet sich im lib-Ordner relativ zum übergeordneten Projekt und maven trasfer die Abhängigkeit jars zu seinem Modul.Ich nehme an, Maven konvertieren relativ zum absoluten Pfad, wenn seine Abhängigkeit Abhängigkeit von Kind-Modul. –

Antwort

4

beschloß ich, das Problem durch systemPath in Mutter pom.xml Aktualisierung wie folgt:

<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath> 

und dann die main.basedir Eigenschaft in Mutter pom.xml und repository

<properties> 
     <main.basedir>${project.basedir}</main.basedir> 
    </properties> 
<repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${main.basedir}/lib</url> 
     </repository> 
</repositories> 

dann Hinzufügen von Eigenschaften und Repositories im Untermodul (Der "/ .." wird hinzugefügt, da sich der untergeordnete Modulordner im übergeordneten Ordner befindet. Gehen Sie also ein Verzeichnis hoch, dann wird rest absoluter Pfad zum übergeordneten lib Ordner wie erwartet erzeugt):

<properties> 
     <main.basedir>${project.basedir}/..</main.basedir> 
    </properties> 
<repositories> 
      <repository> 
       <id>in-project</id> 
       <name>In Project Repo</name> 
       <url>file://${main.basedir}/lib</url> 
      </repository> 
    </repositories> 
+0

[Diese Antwort] (http://stackoverflow.com/questions/1012402/maven2-property-that-indicates-the (-parent-directory) helfe mir, das Problem zu lösen, aber seine Antwort hat mein Problem nicht gelöst, also habe ich etwas Forschung und Entwicklung gemacht und bin mit der oben erwähnten Lösung gekommen. –

0

Von: https://stackoverflow.com/a/2230464/1490322

Finally, declare it like any other dependency (but without the system scope):

<dependency> 
    <groupId>your.group.id</groupId> 
    <artifactId>3rdparty</artifactId> 
    <version>X.Y.Z</version> 
</dependency> 
+0

Die Antwort, die Sie erwähnt haben, hat einen Nachteil, ich frage mich, warum Leute es schätzen.Wenn Sie das Projekt zu einem SVN-Repository, so dass andere Entwickler das Projekt usw. zugreifen und zugreifen können. Sie müssen den Befehl svn installieren bla bla .. (um dort ein lokales Repo festzuschreiben) und wenn es viele nicht-globale Repos gibt, ist es eine zeitraubende Aufgabe. –

+0

Dies funktioniert nicht mit Multi-Modul-Builds, und die Frage des OP bereits impliziert ein gewisses Verständnis dieser Strategie –

Verwandte Themen