6 Stimmen

Maven2: ${basedir} im jar-Pfad verwenden

Ich verwende ein externes, proprietäres jar in meinem Projekt. Wenn ich den Pfad wie folgt in meiner pom.xml hart codiere, funktioniert es gut:

<dependency>
  <groupId>com.foo.bar</groupId>
  <artifactId>bar</artifactId>
  <version>5.2</version>
  <scope>system</scope>
  <type>jar</type>
  <systemPath>D:\workspace\myproj\external\companyname\lib\proprietary_api.jar</systemPath>
</dependency>

Wenn ich jedoch versuche, die Variable ${basedir} zu verwenden, kann Maven die Jar-Datei nicht finden:

<dependency>
  <groupId>com.foo.bar</groupId>
  <artifactId>bar</artifactId>
  <version>5.2</version>
  <scope>system</scope>
  <type>jar</type>
  <systemPath>${basedir}\external\companyname\lib\proprietary_api.jar</systemPath>
</dependency>

Der Pom befindet sich in D:\workspace\myproj

Dies muss auch plattformübergreifend kompatibel sein (Entwicklung unter Windows, Bereitstellung unter Linux).

Danke!

6voto

lexicore Punkte 40914

Es ist falsch, den Systembereich für Ihre proprietären JARs zu verwenden. Sie sollten sie im lokalen/zentralen Repository bereitstellen oder installieren.

4voto

icyrock.com Punkte 26906

Ich bin mir nicht sicher, ob das hilft, aber versuchen Sie es mit forward ( / ) anstelle von rückwärts ( \ ) Schrägstriche. Versuchen Sie auch, die Anwendung mit mvn -e y mvn -X (letzteres erzeugt eine lote von Debugging-Zeilen) - dies könnte Ihnen helfen, das Problem zu lokalisieren.

Hier ist ein Beispiel:

der Verwendung ${basedir} auf die gleiche Weise, wie Sie es wünschen.

Übrigens, warum machen Sie nicht mvn install:install-file die Abhängigkeit statt der Verwendung von systemPath ? Siehe:

3voto

Sajith Punkte 91

Um plattformübergreifend kompatibel zu sein, verwenden Sie ${file.separator} anstelle der Schrägstriche. damit wird automatisch in das vom Betriebssystem vorgegebene Format konvertiert

0voto

rustyx Punkte 72535
  1. Verwenden Sie Schrägstriche in der Pfadangabe.

  2. Der Platzhalter ${basedir} wird extrapoliert nur einmal pro Maven-Lauf. Wenn dieses Projekt nicht das oberste Projekt in Ihrer Projekthierarchie ist, dann wird ${basedir} auf den Ort des obersten Projekts extrapoliert (d.h. das Projekt, in dem Maven gestartet wurde), nicht das aktuelle Projekt.

0voto

Damit es sowohl unter Windows als auch unter Linux funktioniert, müssen Sie mit Profilen arbeiten. Auf diese Weise wird ein bestimmtes Profil auf der Grundlage des Betriebssystems aktiviert und der Build wird portabel.

In jedem Profil können Sie eine Eigenschaft namens jarPath definieren (nur ein Beispiel) und diese Eigenschaft in Ihrer Abhängigkeit referenzieren.

Maven Profiles Einführung

Sehen Sie sich das Betriebssystem-Tag und das Konfigurations-Tag des Profils an. Stellen Sie sicher, dass Ihr Build immer portabel ist und weniger manuelle Schritte erforderlich sind.

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