Java classpath beállítása

Java classpath beállítása
2022-08-13T16:14:38+02:00
2022-08-14T21:15:41+02:00
2022-10-15T21:21:30+02:00
pdavid
Sziasztok,
Egy .jar fájlból visszafordított forráskódot szeretnék lefordítani .jar fájlra (ami tartalmazhat dekompilálásból eredő hibákat).
Igy néz ki a mappa amiben van a fordító és a forráskód: https://kephost.net/p/2022/32/5396_8b91a0fbddac.png (a bin mappában nem csak a javac.exe hanem a fordító többi fájlja is benne van, csak a fénykép kedvéért egyszerüsítettem le).
Ezzel a parancssal próbáltam lefordítani:

javac -d ./build de/audi/gem/*.java -sourcepath "de/audi/gem/*;de/audi/gem/logger/*.java;de/audi/gem/config/*.java"
A fordításnál mindig azt a hibát kapom hogy az adott "csomag nem található":

de/audi/gem/AbstractComposite.java:7: package de.audi.gem.logger does not exist import de.audi.gem.logger.LogMan; ^ de/audi/gem/AbstractConfig.java:7: package de.audi.gem.config does not exist import de.audi.gem.config.ConfigHigh; ^ de/audi/gem/AbstractConfig.java:8: package de.audi.gem.config does not exist import de.audi.gem.config.ConfigHighScale; ^ de/audi/gem/AbstractConfig.java:9: package de.audi.gem.config does not exist import de.audi.gem.config.ConfigMMIKombi; ^ de/audi/gem/AbstractConfig.java:10: package de.audi.gem.config does not exist import de.audi.gem.config.ConfigStandard; ^ de/audi/gem/AbstractConfig.java:11: package de.audi.gem.logger does not exist import de.audi.gem.logger.LogMan; ^ de/audi/gem/AbstractContext.java:11: package de.audi.gem.view does not exist import de.audi.gem.view.RepaintThread; ^ de/audi/gem/AbstractContext.java:12: package org.osgi.framework does not exist import org.osgi.framework.BundleContext;
A kérdésem az lenne hogy milyen paranccsal tudnám lefordítani a forráskódot?
A választ előre is köszönöm.
Mutasd a teljes hozzászólást!
Úgy látom az a baja hogy nem adtad meg az összes Java forrásfájlt neki, és azokra a csomagokra panaszkodik amiket nem adtál meg. Felsorolhatod mind a 12 alkönyvtárat a javac-nek, de ez a megoldás nem skálázódik valami jól. Helyette próbáltam ezt a választ a StackOverflow-ról:

dir /s /B *.java > sources.txt javac -classpath ..\osgi.jar @sources.txt
A jó hír hogy így már nem panaszkodik de.audi.gem csomagokra. A rossz hír, hogy továbbra is hiányol dolgokat az OSGi-ból is illetve org.dsi.ifc.* csomagokat sem talál. Ezeket is be kell szerezned forrás vagy lefordított bináris formátumban, különben nem fogod tudni lefordítani a kódot.

(Java 8-as JDK-val fordítottam mert az volt a legrégebbi ami kéznél volt, de nem hiszem hogy a régebbi javac másképp viselkedne. Egyébként nem kell régi nem támogatott JDK-t telepítened csak azért mert régi a kód. A legújabb JDK is tud régi targetre fordítani, csak a -source és -target kapcsolókkal meg kell adnod, hogy milyen verziójú a forrásod és milyen verziójú bájtkódot szeretnél.)
Mutasd a teljes hozzászólást!

  • Talán ilyesmi:

    cd de/audi/gem javac $(find . -name '*.java')
    Mutasd a teljes hozzászólást!
  • A doksi szerint sourcepath-ra mappákat tudsz felrakni, te pedig wildcard-dal próbálkozol. Erre mit lép?

    javac -d ./build de/audi/gem/*.java de/audi/gem/logger/*.java de/audi/gem/config/*.java
    valamint erre?

    javac -d ./build -sourcepath=.
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszodat, de sajnos ezzel is ugyanúgy a hiányzó csomagokat írja ki hibaként.
    Mutasd a teljes hozzászólást!
  • Amit én írtam, azt kipróbáltad? Arra milyen üzenetet kaptál a fordítótól?
    Mutasd a teljes hozzászólást!
  • Könnyebb lenne, ha meggyónnád, hogy honnan szerezted ezt a jar-file-t.
    Mutasd a teljes hozzászólást!
  • Szia, 
    Elnézést kérek a késői válaszért.
    Kipróbáltam a 

    javac -d build -classpath osgi.jar de/audi/gem/*.java de/audi/gem/logger/*.java de/audi/gem/config/*.java
    paranccsal lefordítani de ugyanúgy nem találta a fájlokat.
    Kipróbáltam a

    javac -d build -classpath osgi.jar de/audi/gem/*.java
    sorral is de azzal is ugyanaz a hiba mint a felső sorral.
    build-ot írtam a ./build helyett mert Windows-on szeretném lefordítani, valamint a -classpath-hoz is beírtam az osgi.jar-t mert arra is szükség van a fordításkor.
    Feltöltöttem ide ( https://mega.nz/file/UwFnXZ4I#D1v7GWS74A2govBH2j6vEFmDj_liBiRzNBfi23.. ) az eredeti gem.jar-t, a visszafordított kódot a gem-decompiled.zip mappába tettem, valamint az internetről letöltött osgi.jar-t is csatoltam (az osgi.jar lefordítása miatt úgy tűnik hogy JDK1.5-ös verzióra van szükség, az eredeti .jar fájl metainfójában azt írja hogy 1.4-es Java-val lefordítva. Amin futnia kellene az ismét lefordított .jar fájlnak az egy régebbi QNX-et futtat és ezt a verziószámot  írja ki a j9 -help parancs beírásakor:

    J9 - VM for the Java(TM) platform, Version 2.3 (c) Copyright IBM Corp. 1991, 2011 All Rights Reserved Target: 20110831_00000_lEdFGV (QNX 6.5.0 arm) JIT - 20070220_1806_r8
    Ami a .jar fájl működését illeti, .esd kiterjesztésü szöveges fájlokat (szkripteket) olvas be amikből egy szervíz menü áll össze, ami .sh szkripteteket tud futtatni meg változókat tud átírni/mutatni a jelenlegi értékét.
    Mutasd a teljes hozzászólást!
  • Úgy látom az a baja hogy nem adtad meg az összes Java forrásfájlt neki, és azokra a csomagokra panaszkodik amiket nem adtál meg. Felsorolhatod mind a 12 alkönyvtárat a javac-nek, de ez a megoldás nem skálázódik valami jól. Helyette próbáltam ezt a választ a StackOverflow-ról:

    dir /s /B *.java > sources.txt javac -classpath ..\osgi.jar @sources.txt
    A jó hír hogy így már nem panaszkodik de.audi.gem csomagokra. A rossz hír, hogy továbbra is hiányol dolgokat az OSGi-ból is illetve org.dsi.ifc.* csomagokat sem talál. Ezeket is be kell szerezned forrás vagy lefordított bináris formátumban, különben nem fogod tudni lefordítani a kódot.

    (Java 8-as JDK-val fordítottam mert az volt a legrégebbi ami kéznél volt, de nem hiszem hogy a régebbi javac másképp viselkedne. Egyébként nem kell régi nem támogatott JDK-t telepítened csak azért mert régi a kód. A legújabb JDK is tud régi targetre fordítani, csak a -source és -target kapcsolókkal meg kell adnod, hogy milyen verziójú a forrásod és milyen verziójú bájtkódot szeretnél.)
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen a segítségedet,
    A hiányzó .jar fájlok beszerzése után már incompatible types hibaüzenetek jönnek elé, tehát a forrásfájlok csatolásával megoldódott a probléma.
    További jó munkát kívánok.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd