Přidání závislosti do Java projektu

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Serg01
Level 1
Level 1
Příspěvky: 65
Registrován: červenec 21
Pohlaví: Nespecifikováno
Stav:
Offline

Přidání závislosti do Java projektu

Příspěvekod Serg01 » 13 říj 2022 15:07

Zdravím, potřeboval bych použít GraphHopper class, ale nějak se mi nedaří spustit package z jejich examplu.

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 package
vytvoří target/graphhopper-example-7.0-SNAPSHOT.jar (a nevypíše žádné chyby/varování), který když zkusím pustit pomocí:

Kód: Vybrat vše

java -cp target/graphhopper-example-7.0-SNAPSHOT.jar com.graphhopper.example.RoutingExample

Tak dostanu chybu:
Error: Unable to initialize main class com.graphhopper.example.RoutingExample
Caused by: java.lang.NoClassDefFoundError: com/graphhopper/GraphHopper


Na 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 jen

Kód: Vybrat vše

public class RoutingExample {

    public static void main(String[] args) {
        System.out.println("Hello");
    }
    // zbytek zakomentovany
 }

Tak to po zkompilovaní a spuštění výše zmíněným příkazem vypsalo do konzole to Hello.
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) { ...

(který by měl být definovaný v té závislosti graphhopper-core), tak to zase začalo vypisovat tu chybu java.lang.NoClassDefFoundError.
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 :D
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>


A spouštím to už tímto příkazem (jelikož to už má v sobě manifest):

Kód: Vybrat vše

java -jar target/graphhopper-example-0.1.jar


Akorát nechápu proč to musí člověk takle složitě dohledávat a proč to maven nedělá automaticky - když je snad přeci jasný, že pokud zadám nějakou závislost, tak ji asi budu potřebovat po zbuildění, abych to mohl pustit, ne? :D
Nebo to spouštím špatně a měl by se ten výsledný .jar spouštět jinak?

Reklama
Uživatelský avatar
Clorky
Moderátor / člen HW týmu
Master Level 8.5
Master Level 8.5
Příspěvky: 7032
Registrován: květen 10
Bydliště: Moravskoslezský kraj
Pohlaví: Muž
Stav:
Offline

Re: Přidání závislosti do Java projektu

Příspěvekod Clorky » 14 říj 2022 15:20

Ahoj, co používáš za IDE? V IntelliJ normálně nakopíruješ dependency, kterou potřebuješ, do pom.xml a zbuildíš. Zapínáš pak normálně přes run.
K hledání těch dependecies se používá https://search.maven.org/.

Serg01
Level 1
Level 1
Příspěvky: 65
Registrován: červenec 21
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Přidání závislosti do Java projektu

Příspěvekod Serg01 » 18 říj 2022 17:54

A jo, IDE, to mě nenapadlo :D Takže jsem to psal v Kate (editor v Kubuntu) a kompiloval/spouštěl v konzoli.
Jel jsem podle tohodle návodu: https://maven.apache.org/guides/getting ... nutes.html, tam se o žádném IDE nezmiňují :D

Uživatelský avatar
Clorky
Moderátor / člen HW týmu
Master Level 8.5
Master Level 8.5
Příspěvky: 7032
Registrován: květen 10
Bydliště: Moravskoslezský kraj
Pohlaví: Muž
Stav:
Offline

Re: Přidání závislosti do Java projektu

Příspěvekod Clorky » 20 říj 2022 22:04

Tak na to se vykašli. Rozjeď si nějaké rozumné IDE, v texťáku a konzoli se nedá rozumně fungovat, kor když rozjíždíš něco takového.
Osobně na Javu doporučuji právě IntelliJ. Jinak hodně lidí miluje Visual Studio Code. To je editor, který si můžeš nabouchat libovolnými doplňky a používat jej nejen na Javu, ale na cokoliv.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Java vers. Java Příloha(y)
    od Fanobrel » 11 čer 2023 15:15 » v Vše ostatní (sw)
    3
    1196
    od petr22 Zobrazit poslední příspěvek
    11 čer 2023 15:45
  • Přidání RAM Příloha(y)
    od Airen » 19 čer 2023 15:56 » v Rady s výběrem hw a sestavením PC
    11
    1505
    od Airen Zobrazit poslední příspěvek
    01 srp 2023 09:26
  • Přidání RAMek
    od Qinter » 12 led 2024 18:34 » v Rady s výběrem hw a sestavením PC
    6
    876
    od Zivan Zobrazit poslední příspěvek
    17 led 2024 08:57
  • Po přidání RAM počítač pípá
    od OutS1d3r » 21 úno 2024 19:01 » v Problémy s hardwarem
    2
    660
    od petr22 Zobrazit poslední příspěvek
    21 úno 2024 19:10
  • Datový model - aktualizace po přidání dalšího sloupce do Access
    od MK_Vs » 27 črc 2023 12:05 » v Kancelářské balíky
    0
    1813
    od MK_Vs Zobrazit poslední příspěvek
    27 črc 2023 12:05

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti