Maven-Kompilierungskomplikation aufgrund komplexer Ordnerstruktur
Ich habe irgendwie komplexe Strukturen von Projekten, die ich über Maven aufbauen möchte. Ich verwende mein lokales Repository .m2/repository
) also denk dran! Bevor ich auf das Problem eingehe, möchte ich zunächst die Struktur erläutern, die ich derzeit habe:
+- pom.xml
+- runtimeProject1
| +- pom.xml
+- runtimeProject2
| +- pom.xml
+- runtimeProject3
| +- pom.xml
+- sharedProjects
| +- pom.xml
| +- sharedProject1
| | +- pom.xml
| +- sharedProject2
| | +- pom.xml
| +- sharedProject3
| +- pom.xml
+- coreProjects
+- pom.xml
+- coreProject1
| +- pom.xml
+- coreProject2
| +- pom.xml
+- coreProject3
+- pom.xml
Zusammenfassend besteht mein Arbeitsbereich aus 2 Unterverzeichnissen, in denen sich Module befinden, die sich auf ihre eigenen Aufgaben beziehen, sowie aus Laufzeitprojekten, die @ verwenden sollecore
undshared.
projekte. Jedes Projekt hat einpom.xml
Datei, und wie Sie sehen können, habe ich auchpom.xml
für Eltern. Alles wird über das lokale Repository erledigt, denken Sie also daran.
etzt läuftmvn install
unter den Verzeichnissen vonsharedProjects
undcoreProjects
separat funktioniert gut. Ich sehe die Erfolgsausgabe und sage, dass alles in Ordnung ist. Das Problem tritt auf, wenn ich den gleichen Befehl aus dem Stammordner, dem obersten Level @, ausführpom.xml
. Ich stehe vor den Warnungen von:
[WARNING] Some problems were encountered while building the effective model for runtimeProjects:runtimeProject1:jar:1.0.0
[WARNING] 'dependencies.dependency.systemPath' for coreProject:com.google.protobuf:jar should not point at files within the project directory, ${project.basedir}/../coreProject/com.google.protobuf/protobuf-java-2.5.0.jar will be unresolvable by dependent projects @ line 31, column 22
[WARNING] 'dependencies.dependency.systemPath' for sharedProject:org.boofcv:jar should not point at files within the project directory, ${project.basedir}/../sharedProject/org.boofcv/GeoRegression.jar will be unresolvable by dependent projects @ line 43, column 22
[WARNING] 'dependencies.dependency.systemPath' for sharedProject:org.boofcv:jar should not point at files within the project directory, ${project.basedir}/../sharedProject/org.boofcv/BoofCV.jar will be unresolvable by dependent projects @ line 50, column 22
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: sharedProject:org.boofcv:jar -> duplicate declaration of version 1.0.,0.qualifier @ line 45, column 16
[WARNING] 'dependencies.dependency.systemPath' for sharedProject:javax.vecmath:jar should not point at files within the project directory, ${project.basedir}/../sharedProject/javax.vecmath/vecmath.jar will be unresolvable by dependent projects @ line 62, column 22
und dann Fehler sagen bestimmtepackage do not exist
, was meiner Meinung nach auf diese Komplikation zurückzuführen ist.
Ich denke, ich muss eines der @ ändepom.xml
s hier, aber weiß nicht, welche und wie.
Aktualisieren Ich habe beschlossen, die Art und Weise, wie ich einige der.jar
-Dateien als Abhängigkeit, hier ist es also:
<dependency>
<groupId>coreProjects</groupId>
<artifactId>com.google.protobuf</artifactId>
<version>2.5.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/../coreProjects/com.google.protobuf/protobuf-java-2.5.0.jar</systemPath>
</dependency>
<dependency>
<groupId>coreProjects</groupId>
<artifactId>org.apache.felix</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/../coreProjects/org.apache.felix/felix.jar</systemPath>
</dependency>
Bitte beachten Sie, dass diese unter @ gut funktioniercoreProjects
undsharedProjects
Ordner. Nur nicht unterruntimeProject
(s), daher meine Frage.
Update 2:
Okay, nach viel bekommen "nicht @ verwendsystemPath
undsystem
as scope "Warnungen von den Kommentatoren, ich habe meine Build-Strategie umstrukturiert und verwende jetzt keine systembezogenen Sachen. Das Problem besteht jedoch weiterhin. Jetzt gebe ich die Abhängigkeiten wie folgt an (da Sie keine pfadbezogenen Sachen sehen können) :
<dependency>
<groupId>coreProjects</groupId>
<artifactId>coreProject2</artifactId>
<version>1.0.0.qualifier</version>
</dependency>
<dependency>
<groupId>coreProjects</groupId>
<artifactId>coreProject1</artifactId>
<version>1.0.0.qualifier</version>
</dependency>
<dependency>
<groupId>sharedProjects</groupId>
<artifactId>org.boofcv</artifactId>
<version>[1.0,)</version>
</dependency>
So sind wir auf der sicheren Seite, ichglaube. Die obigen Warnungen sind verschwunden. Ab sofort bekomme ich einfachpackage does not exist
Fehler. Es ist seltsam, weil die Pakete, über die es sich beschwert, im @ referenziert sinpom.xml
Datei des Roots. Einer der Fehler ist beispielsweise der folgende:
package org.osgi.framework does not exist
Jedoch hat etwas anderes meine Aufmerksamkeit erregt. Der andere Fehler, den ich habe, gibt nicht direkt den Namen des Pakets an, sondern einen Teil dieses Pakets. Zum Beispiel, wenn der Paketname @ isomePackageName
, der Fehler sagtsomePackageName.somePart does not exist
. Es ist also nicht das gesamte Paket, sondern nur ein Teil davon, was mich noch verwirrender macht.
Was könnte der Grund dafür sein?