Sziasztok!
Azt szeretném megoldani, hogy egy kész java programot valamiféle indító batch fájllal vagy shell programmal bárhonnan el tudjak indítani.
A program több osztályt is használ, sőt több package-ot. Mindez együtt van egy NetBeans projekt "classes" könyvtárában.
Hogyan kell megírnom az indító fájlt, hogy a kívánságom teljesüljön?
UBUNTU 8.04 van a gépemen. Minden segítséget köszönök előre is!
- 5816 megtekintés
Hozzászólások
#!/bin/bash
# a classpath változó legyen helyesen beállítva
cd [könyvtár]
java [programnév]
- A hozzászóláshoz be kell jelentkezni
Valami még nem OK.
Létrehoztam egy fájlt "x_pj" névvel és beleírtam az általad megadott parancsokat.
Először azzal jött, hogy "hozzáférés megtagadva", majd "sudo"-val adtam ki a parancsot, de ekkor már az x_pj parancsot nem találta, pedig abból a könyvtárból adtam ki, ahol van a fájl.
Kétféleképpen is:
sudo x_pj
sudo ./x_pj
Mindkettő esetén a "command not found" üzenettel tért vissza.
Kell adnom a fájlnak valamilyen speciális kiterjesztést, amiből tudja a rendszer, hogy parancsról van szó?
- A hozzászóláshoz be kell jelentkezni
chmod +x ...
- A hozzászóláshoz be kell jelentkezni
Mert nem adtál rá futtatási jogot! chmod +x filenév , utána simán ./filenév
Egy apró megjegyzés: ez nem Java, hanem Linux kezdő fórumba való.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Csomagold ossze egy jar-ba, akkor java -jar program.jar. Netbeans tud ilyent.
Ha hasznalsz external jar-okat, akkor ket megoldas van:
1. a JAVA_HOME/lib/ext-be bemasolod a jar-okat.
2. csinalsz egy lib konyvtarat, majd a jar META.INF/MANIFEST.MF-ben megadhatod, hogy hol keresse a lib-eket.
Class-Path:lib/
felsorolassal
- A hozzászóláshoz be kell jelentkezni
Az indító fájl ebben az esetben is szükséges. Nem igaz? Hiszen a fenti:
java -jar program.jar
parancsot is ki kell adni valahogy.
- A hozzászóláshoz be kell jelentkezni
termeszetesen.
- A hozzászóláshoz be kell jelentkezni
Ha a
bash x_pj
parancsot adom ki, akkor már lefut a script, csak ClassNotFoundException hibával megáll. Nyílván valamilyen útvonal megadási hiba lehet.
- A hozzászóláshoz be kell jelentkezni
Igen, ezért írták többen, hogy chmod +x x_pj , hogy el tudd indítani simán is.
És a scriptben írva vagyon, hogy a környezeti változóknak stimmelnie kell:
CLASSPATH="/usr/lib/jvm/java-6-sun/bin"
JAVA_HOME="/usr/lib/jvm/java-6-sun"
Kerüljön bele a /etc/environment -fileba vagy
export CLASSPATH="/usr/lib/jvm/java-6-sun/bin"
export JAVA_HOME="/usr/lib/jvm/java-6-sun"
-ként az x_pj -be. Értelemszerűen le kell cserélni arra a könyvtárra, ahol itt a java jvm,bin,lib telepítve vagyon.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Végül mégiscsak sikerült létrehoznom az életem első működő bash script-jét.
Két probléma miatt kínlódtam rengeteget:
1) Az osztály elérési útvonalában volt egy "space" karakter. Nehezen esett le, hogy ez gond a bash-ban.
2) Az osztály tulajdonképpen egy package-ban van és a "cd" utasításban nem lehet közvetlenül megadni a végleges útvonalat, hanem csak hagyományosan a ".../classes" útvonalig, majd a "java" futtató parancs után kell a package beli útvonalat megadni.
Tehát valahogy így:
#!/bin/bash
cd /home/usr/prj/netbeans/project_name/build/classes
java com/mycatalog/xyz/MainClass
Parancssorban való futtatása:
bash xyz
ha a fájl nevét "xyz"-nek adtuk meg. Ha a az "xyz" fájlt olyan helyre rakjuk, amit a rendszer mindenhonnan elér, akkor ezzel a paranccsal mindenhonnan indítható lesz a program. Sőt indító ikon is készíthető hozzá a Desktop-on vagy az "Alkalmazások" menüben.
Egy utolsó kérdés: a "space" karaktert nem lehetne a bash fájlban valamiféle %20 -val megadni?
- A hozzászóláshoz be kell jelentkezni
tedd idezojelek koze a fajlnevet.
%20 az urlencodeolt alakja, az nem tul nyero bashban.
Tyrael
- A hozzászóláshoz be kell jelentkezni
1. A bashnek semmi baja a szóközzel, csak ha nem escapeled vagy nem teszed idézőjelek közé, akkor nem a paraméter része, hanem paramétert választ el.
Tehát:
$ rm a b
ez kitörölte a és b nevű fájlt
$ rm "a b"
vagy
$ rm 'a b'
vagy
$ rm a\ b
kitörölte az a b nevű fájlt, ahol a filenév része a szóköz
2. Ismét felhívom a figyelmet, hogy nem kell a bash-t külön elindítani, azért van a file első sorában ot a #!/bin/bash, hogy ezzel kell futtatni, csak először _futtathatóvá_ kell tenni a filet. Azaz a filerendszeren meg kell adni a futtatási jogot:
$ chmod +x xyz
3. nem kell bemásolni, elég egy symbolikus link
$ sudo ln -s /könyvtár/ahol/van/xyz /usr/bin/xyz
Ekkor bárhonnan beírva végre fog hajtódni az xyz a /usr/bin/ -ből, ami valójában a te scriptedre mutat, így valójában az fog elindulni
(Egyrészt a /usr/local/bin -be kellene tenni, csak nem tom, hogy az benne van-e a PATH-edben, ill. lehet bármi más is a neve, akár zxy is)
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítségeteket!
Végre úgy működik, ahogy az elvárt.
Külön megköszönöm "sibidiba" segítségét. Igazán részletesen foglalkozott a problémámmal.
Jó napot mindenkinek!
- A hozzászóláshoz be kell jelentkezni