3 Stimmen

Warum wird Maven an der falschen Stelle installiert?

Ich versuche, eine mvn-Installation auszuführen, es kompiliert gut, aber aus irgendeinem Grund versucht Maven, an diesem Ort zu installieren:

[INFO] Installing /home/username/workspace/projectname/pom.xml to 
/home/username/workspace/projectname/?/.m2/repository/artifactname/artifact.pom

Beachten Sie, dass der Speicherort ein ? enthält. Dieser Ort muss eigentlich das Home-Verzeichnis/.m2 sein. Haben Sie eine Idee, woran es liegt, dass es am falschen Ort installiert wird?

Bearbeiten: Das Ausführen von mvn --help:effective-settings ergibt:

  <localRepository xmlns="http://maven.apache.org/SETTINGS/1.0.0">
      /home/username/workspace/projectname/?/.m2/repository
  </localRepository>

Interessanterweise, wenn ich mvn --help:effective-settings von einem anderen Verzeichnis aus ausführe, z.B.: /tmp, ergibt dies:

  <localRepository xmlns="http://maven.apache.org/SETTINGS/1.0.0">
      /tmp/?/.m2/repository
  </localRepository>

0 Stimmen

Maven hat seine eigenen Vorstellungen davon, wo Dinge hingehören. Dies könnte seine Art sein, Ihnen mitzuteilen, dass Sie sich von Anfang an daran gewöhnen sollen.

0 Stimmen

Warum wird es überhaupt in Arbeitsbereich/Projektname installiert? Normalerweise ist es $HOME/.m2

0 Stimmen

@extraneon Ja, das ist der Ort, an dem ich es haben möchte - $HOME/.m2. Ich habe keine Ahnung, warum es an der falschen Stelle installiert wird.

9voto

Pascal Thivent Punkte 548176

Bitte führen Sie das folgende Ziel für Ihr Projekt aus:

mvn help:effective-settings

Und prüfen Sie den Wert von localRepository (und aktualisieren Sie die Frage mit dem Wert).

Nachbereitung: Okay, so weit sind die Dinge kohärent. Als Nächstes...

Der Standardwert von localRepository soll sein ${user.home}/.m2/repository . Vergewissern Sie sich, dass Sie sie in nicht überschreiben:

  • El settings.xml aus der Maven-Installation: $M2_HOME/conf/settings.xml
  • El settings.xml aus der Installation des Benutzers: ${user.home}/.m2/settings.xml

Wenn dies nicht der Fall ist, überprüfen Sie den tatsächlichen Wert von ${user.home} (führen Sie den folgenden Befehl für Ihr Projekt aus):

mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=user.home

Wenn Sie nicht den erwarteten Wert erhalten, prüfen Sie den tatsächlichen Wert von %USERPROFILE% wenn Sie mit Windows arbeiten.

Folgemaßnahmen 2: Ich bin nicht sicher, wie ${user.home} wird unter Linux genau bewertet, aber diese vorherige Frage Java: System.getProperty("user.home") liefert "?" beschreibt das gleiche seltsame Verhalten - und eine Abhilfe: unter Verwendung einer 64-Bit-JDK auf einem 64-Bit-System .

Welches JDK verwenden Sie genau? Auf welcher Plattform? Könnten Sie in der gleichen Situation sein (in diesem Fall, ich glaube wirklich, es ist ein JDK-Bug, ein 32-Bit-JDK sollte den richtigen Wert auf einem 64-Bit-System auch zurückgeben).

Folgemaßnahmen 3: Dies ist eigentlich Fehler-ID: 6972329 (was nicht als JDK-Fehler bestätigt ist, es könnte ein Systemfehler sein).

0 Stimmen

Danke, ich habe die Frage bearbeitet, um die Ausgabe zu erhalten. Und versuchte es von einem anderen Ort und der Wert ändert.

0 Stimmen

Die Ausführung dieses Befehls (mit der Endung -Dexpression=user.home) gibt ? als Ausgabe zurück. Unter Linux führen 'echo ~' und 'echo $HOME' beide zum korrekten Home des Benutzers: /home/Benutzername. Das ist wirklich ärgerlich

0 Stimmen

Da es sich ändert, wenn Sie das Verzeichnis wechseln, vermute ich, dass eine Ihrer Umgebungsvariablen, die sich auf user.home auswirkt, auf das aktuelle Verzeichnis "." gesetzt ist.

0voto

extraneon Punkte 22810

Überprüfen Sie den Wert von localRepository in einstellungen.xml .

0 Stimmen

Ich habe es überprüft - es ist kein Wert eingestellt, es sollte der Standardwert sein. Ich bin mir sogar ziemlich sicher, dass es die settings.xml in ~.m2 nicht einmal sieht, da es nicht weiß, dass es dort etwas installieren soll.

0 Stimmen

@Cuga An diesem Punkt wäre ich versucht, eine grep -r -H "workspace/projectname" auf das gesamte /home/username und sehen Sie nach, wo dies erwähnt wird. Allerdings ist Pascals Antwort sicherlich besser.

0voto

user3852017 Punkte 108

Siehe Ihre Umgebungsvariablen! Vergewissern Sie sich, dass Sie die Variable "MAVEN_OPTS" nicht gesetzt haben, da diese alle anderen Einstellungen außer Kraft setzt.

Ich hatte das von einem anderen Rechner ausgeschnitten und eingefügt und dabei nicht bemerkt, dass es "-Dmaven.repo.local=XXXX" enthielt. (erröten)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X