java -cp dir/

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

java -cp dir/

Beitrag von Pischti » 14.09.2005 16:14:28

hi,
für eine aufruf eines javaprogramms mache ich biher folgendes:

Code: Alles auswählen

java -cp lib/a.jar:lib/b.jar:lib/c.jar startclass
ich habe also im unterverzeichnis lib drei jar-files.
jetzt möchte ich aber statt den einzelnen *.jar nur einen pfad angeben, weil die jar-file auch mal ne versionnummer im dateinamen haben, oder mal ein weiters jar dazukommt. an dem eigentlichen aufruf soll sich aber nix ändern.
ein variante ala

Code: Alles auswählen

#!/bin/bash
java -cp `ls lib/ | ...` startclass 
is auch nich möglich, da das ganze auch unter win laufen muss und die cmd ein knüppeln IMHO nich kann

also meine frage: wie kann ich es hinbekommen, dass ich nur ein verzeichnis angebe und dann alle jar's automatisch mit im classpath sind? mit den optionen von java scheint das nicht möglich zu sein ...
gruss pischti
debian stable

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Beitrag von SubOptimal » 14.09.2005 18:42:05

Hi Pischti,

so wie Du das vorhast wird es nicht gehen.

Beispiel:
- Verzeichnis foobar/ wird mit -cp dem Classpath zugefügt
- Du hast eine Klasse die ein "import org.foo.*" enthält
- dann sucht java nach der Klasse "Bar" im Verzeichnis foobar/org/foo/
oder
- die jar Datei foobar.jar, welche die Klassen aus org.foo.* enthält, wird mit -cp dem Classpath hinzugefügt
- dann sucht java nach der Klasse "Bar" in der Verzeichnisstruktur innerhalb von foobar.jar

Mir würden da jetzt folgende Möglichkeiten einfallen:
- Du entpackst alle jar Dateien in ein Verzeichnis und nimmst dieses in den Pfad auf
- Du packst den Inhalt alle jar Dateien in eine neue und nimmst diese in den Pfad auf
(Geht natürlich nicht so ohne, wenn mit signierten Dateien über den Browser gearbeitet wird.)

Besser wäre es die jar Archive ohne Versionnummerierung zu benutzen. Was spricht dagegen?

SubOptimal

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 14.09.2005 19:12:06

Hier ein kleines Script mit dem du das bewerkstelligen kannst:

Code: Alles auswählen

@echo off
set STARTCLASS=startclass
set JARDIR=c:\lib
set JARS=
for %%i in (%JARDIR%\*.txt) do call :ADDJAR  %%i
set JARS=%JARS%;
if defined JARS set JARS=%JARS:;;=%
@echo on
java -cp %JARS% %STARTCLASS%
goto :EOF

:ADDJAR
set JARS=%1;%JARS%
goto :EOF
Nicht vergessen dieses Script muß die Extension ".bat" oder ".cmd" erhalten


Gruß
gms

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 14.09.2005 20:06:08

danke erstmal für die antworten ...
die versionsnummern sollen da sein, weil:
das zeugs bei ca. 100 kunden rumliegt. die bekommen zwar regelmässig updates, aber es werden ncht immer alle eingespielt. fernwartung ist nicht immer möglich. und irgendwann fragt man mal einen kunden, welcher version er von einem jar.-file hat. antwort: keine ahnung, updates? hab ich vergessen.. da ist es immer die enifachste variante sich mal den dateinamen vorlesen zu lassen .. :-) ... und ähnliche fälle ...

das mit dem script von gms sieht gut aus. frage ist nur, geht das auch auf nt4 ohne die cmd-extensions ? leider hab ich keinen nt4-server zur verfügung ...

das was ich suche muss eben EINFACH sein, damit ein update von einem programm auch
von einem pseudo-admin (kunde) ohne probleme erledigt werden kann. hilfsscripte mache da das ganze eben immer komplziert .... :-)

meine hoffnung war eben, dass das ganze einfach über eine (mir unbekannte) java-option machbar wäre ...
gruss pischti
debian stable

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 14.09.2005 20:30:52

Pischti hat geschrieben:frage ist nur, geht das auch auf nt4 ohne die cmd-extensions ? leider hab ich keinen nt4-server zur verfügung ...
Da bin ich mir jetzt auch nicht sicher, aber es läßt sich sicher auch ohne die cmd-Extensions bewerkstelligen.
Für deinen Anwendungsfall würde ich mir aber eher eine kleine Java Klasse basteln, mittels derer die eigentliche Applikation gestartet wird. Sollte auch keine große Übung sein

Gruß
gms

pascalbockhorn
Beiträge: 1
Registriert: 21.09.2005 13:47:12

Beitrag von pascalbockhorn » 21.09.2005 13:49:10

unter linux:

java -cp $(ls lib/ | grep jar | sed s#^#`readlink -f lib/`/# /dev/stdin | tr -s '\n' ':') classname

hat jemand was einfacheres?

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 21.09.2005 13:55:07

soweit war ich auch schon. es ging um eine varainte, die auch unter win funktioniert ...
gruss pischti
debian stable

Antworten