Stáhnul jsem zdrojový kód z https://github.com/graphhopper/graphhopper, z toho jsem si vytáhnul složku example, vlezl do ní a nechal zkompilovat mavenem.
(musel jsem teda ještě v pom.xlm upravit verzi závislosti na graphhopper-core z 7.0-SNAPSHOT na 6.0, která je k dispozici v maven repozitáři)
Kód: Vybrat vše
mvn packageKód: Vybrat vše
java -cp target/graphhopper-example-7.0-SNAPSHOT.jar com.graphhopper.example.RoutingExampleNa stackoverflow jsem četl, že to může způsobit také chybějící dependency. Když jsem zakomentoval většinu obsahu v RoutingExample.java, a nechal jsem tam jenError: Unable to initialize main class com.graphhopper.example.RoutingExample
Caused by: java.lang.NoClassDefFoundError: com/graphhopper/GraphHopper
Kód: Vybrat vše
public class RoutingExample {
public static void main(String[] args) {
System.out.println("Hello");
}
// zbytek zakomentovany
}
Ale jakmile jsem začal postupně odkomentovávat, a dostal jsem se k funkci, která jako parametr vyžaduje objekt typu GraphHopper
Kód: Vybrat vše
public static void routing(GraphHopper hopper) { ...Mimochodem, když jsem měl jen ten výpis "Hello" a odkomentované všechny importy, tak to pořád fungovalo, takže importy tu chybu nezpůsobují.
Výsledný graphhopper-example-7.0-SNAPSHOT.jar má jen 13kB, přitom graphhopper-core-6.0.jar (stažený z https://mvnrepository.com/artifact/com. ... r-core/6.0) má 1.6 MB, ale nikde ve složce target nemůžu najít, že by tam maven vložil tu knihovnu. Jak se má správně do Javy přidat další .jar soubor, ze kterého bych chtěl používat některé třídy?
Dodatečně přidáno po 1 hodině 4 minutách 48 vteřinách:
Tak se mi to podařilo nakonec na základě 2 témat na stackoverflow dát dohromady
První poradil jak donutit maven, aby ty závislosti přidal do target složky, druhý poradil jak říct mavenu, aby vytvořil MANIFEST.MF, ve kterém specifikuje hlavní třídu, ze které se má .jar spouštět, a classpath, což vypadá na seznam těch závislostí, které bude ten můj .jar potřebovat.
Takže jsem přidal do pom.xml tenhle kus kódu, a už to funguje.
Kód: Vybrat vše
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.graphhopper.example.RoutingExample</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Kód: Vybrat vše
java -jar target/graphhopper-example-0.1.jarNebo to spouštím špatně a měl by se ten výsledný .jar spouštět jinak?

