Konsole und packages

Leno

Bekanntes Mitglied
Hi,

ich habe eine Problem vielleicht könnt Ihr mir weiterhelfen. Ich möchte gerne per Konsole ein Programm ausführen. Das Programm beinhaltet z.B. folgende JAR
import org.apache.commons.cli.Options; //also dieApacheCommons

Jetzt möchte ich das Programm testweise Kompileren und dann über Konsiole ausführen.

Java:
Options lvOptions = new Options();	
	
	lvOptions.addOption("h", "hilfe", false, "zeigt diese Hilfe an.");

So sieht z.B. der Code aus. Die ClassPath Variable habe ich bereits gesetzt. Aber es erscheint folgender fehler

MyClass.java:13: cannot find symbol
symbol : class Options
location: class MyClass
Options lvOptions = new Options();
^
MyClass.java:13: cannot find symbol
symbol : class Options
location: class MyClass
Options lvOptions = new Options();

Wahrscheinlich erkennt er das Packet nicht ?? oder findet die CommonsCLI nicht. Ansosnten weiß ich nicht genau wie ich mit Packeges in der Konsole umgehen soll. Nehmen wir an ich habe ein packege mit dem namen myPackege.test und darin befinden sich eine Main und zwei weitere Klassen, wie compiliere ich dies und führe dies aus ? hat jemand einen Tip ?

Danke im voraus 🙂
 
Zuletzt bearbeitet von einem Moderator:
Ja Danke benutze bereits Eclipse will mich mit den Basics von Verzeichnissen und Strukturen in Java beschäftigen da ich eine JAR erzeugen will. Aber werde mich mal einlesen danke.
 
Hi leute bin bissl verzweifelt und am rumprobieren ! vielleicht kann ja jemand helfen !

Folgendes ich habe mir zwei Ordner erstellt auf dem Desktop.

In dem einen befindet sich folgende Verzeichnisstruktur

C:\Dokumente und Einstellungen\Leno\Desktop\useAdd\en\jbb
In der jbb ist eine Klasse UseExClass die eine andere Klasse importieren soll

Java:
package de.jbb;
 
import de.extern.Addition;
 
public class UseExClass {
 
  public static void main(String[] args) {
 
    Addition add = new Addition();
    System.out.println(add.addiere(5, 10));
  }
}

Die Klasse soll dann in einem anderen Projektornder die Klasse Addition nutzen diese liegt in folgendem Verzeichnis --> C:\Dokumente und Einstellungen\Leno\Desktop\javaklassen\de\extern

Diese Klasse sieht dann so aus :

Java:
package de.extern;
 
public class Addition {
 
  public int addiere(int zahl1, int zahl2) {
    return zahl1 + zahl2;
  }
}

Jetzt möchte ich dies nutzen und estze folgende ClassPath variable.

C:\Dokumente und Einstellungen\RichardR\Desktop\javaklassen\de\extern\Addition; java en.jbb.UseExClass

Das ganze geht dann auch aber wenn ich die Klasse UseExClass ausführen möchte passiert folgende :Exception in thread "main" java.lang.NoClassDefFoundError: en/jbb/UseExClass


Ich weiß nicht ob es daran liegt das er den ClassPath nicht richtig findet hat jemand eine Lösung oder Tip
 
Folgendes ist eine Möglichkeit (ohne Verzeichniswechsel) das ganze per Shell zu machen:

Code:
cd C:\Dokumente und Einstellungen\Leno\Desktop
javac javaklassen\de\extern\*.java
javac -cp javaklassen useAdd\de\jbb\*.java
java -cp javaklassen;useAdd de.jbb.UseExClass

1. Zeile sollte klar sein.
2. Kompiliert alle Javaklassen, die sich in C:\Dokumente und Einstellungen\Leno\Desktop\javaklassen\de\extern\ befinden.
3. Kompiliert alle Javaklassen, die sich in C:\Dokumente und Einstellungen\Leno\Desktop\useAdd\de\jbb\ befinden. Dabei können Abhängigkeiten zu allen Klassen in C:\Dokumente und Einstellungen\Leno\Desktop\javaklassen genutzt werden.
4. Führt die Klasse de.jbb.UseExClass aus, java sucht dabei ab C:\Dokumente und Einstellungen\Leno\Desktop\javaklassen und C:\Dokumente und Einstellungen\Leno\Desktop\useAdd nach Klassen.
 
\en\jbb
passt schonmal nicht zu
> package de.jbb;

erstelle eine leere Klasse ohne komplizierte Imports, nur mit main-Methode "Hello World",

rufst du überhaüt javac auf? ohne Kompilieren nur mit .java-Datei geht doch gar nichts..

-------

wenn das klappt kann man über das angesprochene zweite Problem nachdenken, die Addition-Klasse,
willst du mit ClassPath-Umgebungsvariable arbeiten?
warum denkst du dir irgendeinen Kram wie
C:\Dokumente und Einstellungen\RichardR\Desktop\javaklassen\de\extern\Addition
aus? was soll das sein? das ist weder die .java noch die .class-Datei, Dateiendungen fehlen, soll Java sich den Rest selber denken?

natürlich muss Java einiges weiterdenken, aber nur nach gesicherten bekannten Konzepten, nicht aufs Blaue geraten..
in den ClassPath gehört das Grundverzeichnis, in welchem sich die hoffentlich bereits kompilieren .class-Dateien je nach ihren package-Angaben in passenden Unterverzeichnissen befinden,
C:\Dokumente und Einstellungen\RichardR\Desktop\javaklassen\
wäre ein denkbarer Eintrag für den ClassPath

------

generell und für alle Zeiten in diesem Universum und den nächsten solltest du es in der Programmierung vermeiden,
je etwa mit 'Dokumente und Einstellungen' auch nur entfernt ähnlichem direkt zu tun zu haben,
speichere deine Projekte meinetwegen in
c:\java\Projekte\xy,
vermeide alles was mit Betriebssystem zu tun hat, besonders Leerzeichen..
 
@mvitz : danke bis auf das letzte Kommando funktioniert es ich habe die Progamme auch Kompiliert

folgende Fehlermeldung spuckt er aus

Exception in thread "main" java.lang.NoClassDefFoundError: en/jbb/UseExClass (wrong name: de/jbb/UseExClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)


@ Slater : Ich werde den Typ mit den Dokumente undEinstellungen berücksichtigen wusste nicht das dies so wichtig ist.Werde das ganze nochmal sauber aufsetzen und die tips berücksichtigen
 
HI DANKE ICH HABS GESCHAFFT


🙂 Danke euch beiden weiß voran es lag bin zu schludrig : (


Werde aber alle Tips berücksichtigen und dies dann ausführen.
 

Zurück
Oben