[Megoldva:] Java program indítása

Fórumok

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!

Hozzászólások

#!/bin/bash

# a classpath változó legyen helyesen beállítva

cd [könyvtár]

java [programnév]

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ó?

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

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.

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

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?

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

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!