java mit -cp unter unix

Status
Nicht offen für weitere Antworten.

6aholic

Mitglied
hi!

in meinem win32 system starte ich mein javaprogramm, was eine externe .jar datei benötigt mit:

java -cp /pfad_der_jar/jarname.jar klasse.


wie geht das ganze aber unter unix?


musste man da den classpath nicht irgendwie anders setzen!?

ich gugg gleich nochmal.

so far.
6aholic.
 
java -cp /pfad_der_jar/jarname.jar klasse

Du kannst auch zuerst die CLASSPATH var setzen...

export CLASSPATH = ./:/pfad_der_jar/jarname.jar
java klasse


(btw. Das geht in Windows auch)
 
bash># /usr/local/java/jdk1.5.0/bin/java -cp /usr/local/java/mysql-con.jar sql_test
Exception in thread "main" java.lang.NoClassDefFoundError: sql_test

wie ihr hier seht, immernoch 2 probleme:
a.) ich muss java mit pfad aufrufen, obwohl ich folgende zeilen ausgeführt habe:

JAVA_HOME="/usr/java/j2sdk1.4.2_01"
PATH="$PATH:/usr/java/j2sdk1.4.2_01/bin"
export JAVA_HOME PATH


b.) trotz -cp jar funktioniert es nicht so, wie auch unter windoofs.

so far.
6aholic.
 
Exception in thread "main" java.lang.NoClassDefFoundError: sql_test

das ist kein Problem mit dem jar, sondern du machst das in einem Verzeichnis, in dem keine sql_test.class liegt

ausserdem schreibt man Klassen mit einem Grossbuchstaben am anfang 🙂
 
Außerdem diese 3 Dinge hier

JAVA_HOME="/usr/java/j2sdk1.4.2_01"
PATH="$PATH:/usr/java/j2sdk1.4.2_01/bin"
export JAVA_HOME PATH

Haben nix mit dem Classpath zum tun 😉

Das setzt nur den pfad fürs java /javac und wo das Java HomeVerzeichnis ist .
 
bash># ls
. .. Scrabblet sql_test.class sql_test.java


liegt sie doch!? 😛


ist es nicht vollkommen wurst, wie ich meine "klassen" nenne?
von dieser standardiesierung halte ich nicht viel, im ernstfall werd ich mich aber bemühen (;

@the29
ich glaub, du hast wohl nicht alles gelesen (;
gugg mal mein problem "a.)".

so far.
6aholic.
 
Probier mal


export JAVA_HOME="/blablalb"/

und export PATH="$PATH....."

extra aufrufen 😉


Achja, die Namesgebung ist was für die Studenten die das gelernet haben....

Die lernen viele Sachen, so wie das eine Funktion niemals mehr als 40 Zeilen haben sollte, aber solche Sachen kannst in der Praxis in den Wind schießen!

Hauptsache der Name sagt was aus und da sind _ eigentlich auch vorteilhaft

Solange deine Klassen nicht __1 oder __a heißen sollte das egal sein!
 
6aholic hat gesagt.:
bash># ls
ist es nicht vollkommen wurst, wie ich meine "klassen" nenne?
von dieser standardiesierung halte ich nicht viel, im ernstfall werd ich mich aber bemühen (;
6aholic.
Auf englisch: "it is not done"
 
bash># /usr/local/java # export JAVA_HOME="/usr/local/java/jdk1.5.1"
bash># /usr/local/java # export PATH="$PATH:/usr/local/java/jdk1.5.1/bin"
bash># /usr/local/java # export JAVA_HOME PATH
bash># /usr/local/java # java -version
bash: java: command not found


ahja? was ist nicht done?


so far.
6aholic.
 
hoer auf das zu machen

bash># /usr/local/java # export JAVA_HOME PATH

das ist bullshit!!

Du exportierst es schon mit den vorigen sachen, das reicht!

und mach mal das

env | grep PATH

und schau ob dann dein Pfad eingetragen worden ist!
 
PATH=/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin:/usr/local/java/jdk1.5.1/bin


sieht wohl so aus...


so far.
6aholic.
 
Mh, und es geht trotzdem nicht!

Das ist dann aber schon sehr komisch!

Machst du das auch immer in der gleichen Shell?
 
yo, immer in der gleichen.
ich hab auch nur eine offen (;

gibts auch noch ideen zum cp aufruf?

@becstift
auch wenn ich die 3. zeile weglasse, klappts nicht.
überigenz hab ich das selbe problem im windoofs (;


so far.
6aholic.
 
übrigenz passiert das hier bei eingabe ohne den -cp klasse parameter...
bash> # /usr/local/java/jdk1.5.0/bin/java sql_test
Treiber kann nicht geladen werden: com.mysql.jdbc.Driver
Verbindung fehlgeschlagen: No suitable driver


hilft euch das weiter?

so far.
6aholic.
 
ja

du kannst das programm starten! alles OK!

=> aber dann fehlt der Treiber

also musst du auch noch mitgeben
Code:
bash># /usr/local/java/jdk1.5.0/bin/java -cp .:/usr/local/java/mysql-con.jar sql_test
und genau das hat foobar viel weiter oben schon gepostet.???
 
ja, es funktioniert.
doch leider nur mit pfadangabe,....

aaahhh!
es geht!
ich hatte es unter windoofs immer so gemacht:
java -cp ;:/usr/local/java/mysql-con.jar sql_test
[achtet auf . und ;]

so gehts nämlich nicht unter unix.

es geht zwar noch nicht, da die verbindung fehl schlägt,
aber das bekomm ich doch wohl noch hin...

jetzt fehlt also nur noch, dass ich den pfad weglassen kann,´
dann bin ich doch ganz zufrieden!

DANKE!

so far.
6aholic.
 
es tritt leider eine exception auf:
Verbindung fehlgeschlagen: Communications link failure due to underlying excepti
on:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.ja
va:151)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1699)
at com.mysql.jdbc.Connection.<init>(Connection.java:405)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java
:268)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at sql_test.main(sql_test.java:20)


** END NESTED EXCEPTION **



woran das wohl liegen könnte...?!

so far.
6aholic.
 
aaahhh!
es geht!
ich hatte es unter windoofs immer so gemacht:
java -cp ;:/usr/local/java/mysql-con.jar sql_test
[achtet auf . und ;]
Das hatte ich weiter oben auch schon geschrieben.
Wer lesen kann ist klar im Vorteil ;-)


Läuft der MysqlServer?
nmap localhost

Hast du in der my.cnf den Netzwerkdämon aktiviert?
Mittlerweile ist der standardmäßig auskommentiert.
 
Das verstehe ich jetzt nicht. Das Einzige, was du jetzt meinen könntest, ist, dass halt skip-networking in der my.cnf gesetzt ist, aber das ist ja nicht debianspezifisch.

cu
 
ports sind frei und datenbank läuft.
in der shell mit php zb gehts ya auch ohne probleme.

und bei allem respekt hr. foobar wollen wir doch bei den tatsachen bleiben, denn ich finde nichts wo du das geschrieben hast.
wer also nicht schreibt und dann doch denkt er hätte es geschrieben, ist klar im nachteil (;

so far.
6aholic.
 
Bei PHP und der Shell geht es aber meistens über den entsprechenden Socket, nicht über 3306, es sei denn, man gibt das explizit an.
Schau doch einfach mal mit netstat nach, ob der mysqld wirklich an seinem Port hängt:
Code:
netstat -pltn | grep mysqld

(und ich schaue nachher, ob das wirklich notwendig ist, dass man für Java den Port offen haben muss - aus Sicherheitsgründen ist nämlich genau das eigentlich eine schlechte Idee)

cu
 
und bei allem respekt hr. foobar wollen wir doch bei den tatsachen bleiben, denn ich finde nichts wo du das geschrieben hast.
wer also nicht schreibt und dann doch denkt er hätte es geschrieben, ist klar im nachteil (;

Das ist einer meiner vorherigen Beiträge:
foobar hat gesagt.:
Du mußt das aktuelle Verziechnis auch zum Classpath hinzufügen:
bash># /usr/local/java/jdk1.5.0/bin/java -cp .:/usr/local/java/mysql-con.jar sql_test

ausserdem schreibt man Klassen mit einem Grossbuchstaben am anfang
Und ohne Unterstriche (Camelcase) ;-)

Wie du sehen kannst habe ich dich bereits darauf hingewiesen, das akutelle Verzeichnis(.), in den Classpath mit aufzunehmen.
 
bash> # netstat -pltn | grep mysqld
da kommt nix.

ohne die pipe und den grep mysqld kommt ne liste ohne mysl...

also scheint der port nicht offen zu sein, wie ich das mal interpretiere (;
wie weiter?

danke!

so far.
6aholic.
 
my.cnf suchen und aus skip-networking darin einen Kommentar machen, bzw. Zeile löschen. Anschließend mysqld neu starten.

cu
 
ich hätte es gern ein bisschen ausführlicher...
was mach ich dann? was passiert dann?
vor- & nachteile...

ansonsten danke schonmal, werd mich mal erkundigen 🙂

so far.
6aholic.
 
ich habs versucht, ist aber wohl nicht ganz erfolgreich.
unter
bash> # netstat -pltn | grep mysqld
kommt zwar noch nix, aber das skip-networking hab ich maskiert.


selber fehler beim ausführen der sql_test klasse.

so far.
6aholic.
 
Hast du den Daemon neu gestart?
Was sagen die Logfiles( Syslog,Mysql.log, Messages)?
Was sagt sagt nmap?
 
neu gestartet: klaro. 🙂

nmap sagt:
bash: nmap: command not found

nach den logfiles gugg ich grad mal 🙂

so far.
6aholic.
 
ich hab mal ein bisschen geguggt und auch was gefunden...

und ya, leider...
wenn ich allerdings die lösung so teile, kommt bei mir immernoch der selbe fehler... 🙁🙁🙁
scheint also nicht die selbe ursache zu sein, geht wohl aber schon in die richtige richtung...


hier ein kleiner, interessanter ausschnitt:
zitat:
"// ich denke wie sie sollen:
// 127.0.0.1 localhost
// # special IPv6 addresses
// ::1 localhost ipv6-localhost ipv6-loopback

meine /etc/hosts enthält auch diese Zeilen. Ich habe festgestellt, dass das Problem nicht auftritt, wenn ich die untere Zeile (die für IP-V6) kommentiere. Dann kann das System den Namen "localhost" mit Hilfe der ersten Zeile auflösen und dann klappt es...
Also wohl wirklich ein Problem mit der Namensauflösung bei IP-V6?"

zitat ende.

link:
http://www.java.de/forum/message/23818/


so far.
6aholic.
 
# apt-get install nmap
bash: apt-get: command not found
# apt -get install nmap
bash: apt: command not found
# -get install nmap
bash: -get: command not found
# install nmap
install: too few arguments
Try `install --help' for more information.
# install
install: too few arguments
Try `install --help' for more information.


so far.
6aholic.
 
nein, die distribution ist eine suse.
Achso, ich hatte verstanden, daß du mit Debian arbeitest. Unter Suse mußt du mit rpm arbeiten:

Als root:
Code:
rpm -Uhv nmap.rpm

Wie der genaue Name das Packets lautet, findest du entweder mit einem
Code:
find -iname "*nmap*.rpm"
im DVD-Verzeichnis heraus. Also mußt du zuerst die Distributions-DVD mounten mit
Code:
mount /media/dvd
Danach ins Verzeichnis /media/dvd wechseln und das Packet suchen.

Order du machst es einfach über yast2, das ist aber langweilig. ;-)
 
ich hatte mich doch für die langweilge yast2 entschieden 🙂
der mysqlserver ist offen, auf den normalen port, wie ich das so sehe 🙂

das sagt also nun nmap:

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1592 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop-3
111/tcp open sunrpc
465/tcp open smtps
995/tcp open pop3s
3306/tcp open mysql

Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds

ich dank euch schonmal an eurer anteilnahme,
dir besonders, foobärchen 🙂


so far.
6aholic.
 
...
und leider geht es immernoch nicht.

anscheinend ist aber eben ne andere fehlermeldung gekommen.
ich versuch es weiter 🙂

so far.
6aholic.
 
# /usr/local/java/jdk1.5.0/bin/java -cp .:/usr/local/java/sql.jar sql_test
Verbindung fehlgeschlagen: null, message from server: "Host 'localhost.localdomain' is not allowed to connect to this MySQL server"


user und password stimmen aber.

so far.
6aholic.
 
Dem Db-User fehlen Rechte:

Code:
Grant all on mydb.* to myuser@'%' identified by 'mypassword'

und flush privilegs nicht vergessen.
 
Mach sowas aber nicht auf einem Produktionsserver: GRANT ALL ist nicht so toll, und noch weniger in Verbindung mit % als Host.
Besser: Nur die wirklich benötigten Rechte übergeben, und entweder localhost.localdomain als host in der mysql-Table, oder aber einfach localhost als Host beim Connect angeben. Alternativ /etc/hosts so bearbeiten, dass da in der Zeile mit localhost.localdomain noch ein alleinestehendes localhost steht, dann sollte das auch so funktionieren.

cu
 
niemand hat gesagt.:
Wie gesagt, PHP geht über den lokalen Socket.
cu

?

auch bei phpmyadmin kann man einen Host angeben

=> schau in die phpmaydmin/config.inc.php oder wie das ding heisst, da stehen die Parameter dann drin (die kannst du auch für java verwenden)
 
es geht nun. ich gehe über den localhost rein und hab den host nicht gegrantet. wäre mir auch zu unsicher gewesen.

es geht nun wirklich alles.
ich kann auch einigermaßen damit arbeiten (hab ya im win schonmal probeüben müssen,...)

weiterhin kann ich euch sagen:
DANKE!

achso, noch die lösung...
schnallt euch an:
ein tippfehler im script. _peinlich_


so far.
6aholic.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben