2016-09-13 1 views
1

ich habe pom-Datei: https://gist.github.com/anonymous/2d2abdc47d868250e8f47d74bdd643c2Wie lösen confict mit Maven

i mit dem Befehl bauen: clean compile assembly:single

aber ich erhalte Warnung:

[WARNUNG] 'dependencies.dependency.systemPath' für com.xxx.backtesting: Client: jar sollte nicht auf Dateien im Projektverzeichnis zeigen, $ {project.basedir} /lib/client-0.1-jar-with-dependencies.jar wird nicht auflösbar sein durch d ependent Projekte @ Zeile 18, Spalte 25

und diese Bibliothek leider nicht in der JAR-Datei vorhanden sein:


Wenn ich meine jar-Datei ausführen, ich erhielt:

java -jar backtestingCandlesDownloader-0.1-jar-with-dependencies.jar 1440672480000 1441025280000 60000 
task: startDate = 1440672480000, endDate = 1441025280000, period = 60000 
Exception in thread "main" java.lang.NoClassDefFoundError: com/xxx/backtesting/client/model/Server 
    at com.xxx.backtestingCandlesDownloader.Main.main(Main.java:33) 
Caused by: java.lang.ClassNotFoundException: com.xxx.backtesting.client.model.Server 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 1 more 

ich weiß nicht, Wie schließe ich client-0.1-jar-with-dependencies.jar in die jar-Datei ein.

Antwort

2

Ihre Warnung bezieht sich auf 16 und 18 der POM Linie:

<scope>system</scope> 
... 
<systemPath>${project.basedir}/lib/client-0.1-jar-with-dependencies.jar</systemPath> 

Diese Linien identifizieren ein systemPath für eine Bibliothek und scope lassen Maven wissen, dass es durch das System zur Verfügung gestellt wird, statt im Rahmen des Projektes [1 ].

Ihr bester Ansatz wäre es, es in Ihr lokales Maven-Repository aufzunehmen, indem Sie es als Teil Ihres Builds installieren. Dadurch wird die Client-JAR-Datei während der Bereinigungsphase als Mavenartefakt in Ihrem lokalen Maven-Repository installiert und für Abhängigkeitsprojekte verfügbar gemacht. Die Installation als Teil des Lebenszyklus stellt sicher, dass das Artefakt automatisch für alle zukünftigen Entwickler/Builds verfügbar ist.

<build> 
    <plugins> 
     <!-- Installs new artifact in the local repository --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <version>2.5.2</version> 
      <executions> 
       <execution> 
        <id>install-artifact</id> 
        <phase>clean</phase> 
        <configuration> 
         <file>${project.basedir}/lib/client-0.1-jar-with-dependencies.jar</file> 
         <repositoryLayout>default</repositoryLayout> 
         <groupId>com.xxx.backtesting</groupId> 
         <artifactId>client</artifactId> 
         <version>0.1</version> 
         <packaging>jar</packaging> 
         <generatePom>true</generatePom> 
        </configuration> 
        <goals> 
         <goal>install-file</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Einmal installiert, können Sie es einfach als eine Abhängigkeit verweisen, wie Sie würde jede andere Maven Abhängigkeit:

<dependencies> 
... 
    <dependency> 
     <groupId>com.xxx.backtesting</groupId> 
     <artifactId>client</artifactId> 
     <version>0.1</version> 
    </dependency> 
... 
</depencencies> 

Alternativ Sie das Artefakt über die Kommandozeile installieren könnte, würde aber die voll qualifizieren müssen Standort Ihrer JAR-Datei [2]. über die Befehlszeile Methode Nach der Installation würden Sie in der Lage, die Bibliothek verwenden wie jede andere Abhängigkeit in Maven:

mvn install:install-file -Dfile=/path/to/lib/client-0.1-jar-with-dependencies.jar -DgroupId=com.xxx.backtesting -DartifactId=client -Dversion=1.0 -Dpackaging=jar 
  1. https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
  2. https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
Verwandte Themen