Package import-Klausel

ocsme

Top Contributor
Guten Tag,

zum Glück komme ich über die Anfänger Themen hier nicht raus :(
Diese Packages machen mir noch gänzlich Graue Haare :(
Bestimmt ein nettes und einfaches Thema aber ich bekomme es nicht ganz hin.

Wo liegt mein Problem
In Eclipse habe ich 2 Projekte erstellt Prog1 und Prog2.
In Prog1 habe ich Source Folder wie z. B. uebungen, sonstiges, alda, pearson und in Prog2 collections, inputOutput, uebungen, generics, javaFX
nun bräuchte ich in Prog1 unter dem Ordner pearson im package 44 etwas aus Prog2.
Muss ich nun wirklich das Projekt Prog2 in Prog1 hinzufügen über:
Project-->Properties-->Java Build Path-->Projects-->Add Project
Ich dachte es würde auch mit dem qualifizierten Namen funktionieren.
Wenn ich nun aber im package 44 eine import Klausel anhänge mit Prog2.uebung4.verschlüsselung.*; sagt er mir "The import Prog2 cannot be resolved"
Geht das so überhaupt?
Wenn NEIN dann verstehe ich nicht wie man mehrere packages aus verschiedenen Projekten und Source Folder in einer jar-Datei zusammen fügen kann?

Ich hoffe man kann meine Frage verstehen.
Danke im voraus :)

LG
 

mihe7

Top Contributor
Das Projekt spielt für Java überhaupt keine Rolle. Du hast einfach nur Klassen, die in Paketen liegen. Gesucht werden die Klassen im Classpath. Wenn Du in der IDE eine Abhängigkeit einfügst, dann sorgt diese dafür, dass der Classpath entsprechend angepasst wird (in der Regel wird das Jar in den Classpath eingefügt, das von dem jeweiligen Projekt erzeugt wird). Danach kannst Du die Klassen genauso importieren, als wären sie direkt Teil des Projekts.

Sprich: füg die Abhängigkeit Deinem Projekt hinzu und lass beim Import den Projektnamen einfach weg.
 

httpdigest

Top Contributor
Noch etwas spezifischer für Eclipse: Wenn du eine Projektabhängigkeit zu Projekt B im Build Path deines Projektes A hinzufügst, dann sorgt das dafür, dass der classpath von Run Configurations der Klassen in A den Output Folder von Projekt B als Classpath root enthält (bzw. die Output Folder, wenn du mehrere Output Folder konfiguriert hast).
Zur Designzeit hast du ja erstmal nur .class Dateien in Ordnern (außer natürlich bei Library Dependencies, für die du schon .jar Dateien hast).
 

ocsme

Top Contributor
Danke für die Antwort.

Kann ich also wenn ich aus dem ganzen ein großes Projekt machen wollt, was hier natürlich keinen Sinn macht doch das mal außer acht, ein neuen Ordner erstellen wo ich Prog1 und Prog2 rein packe ein .jar Projekt draus machen?
In dem man die Meta-Datei ändere mit dem Classpath (keine Ahnung wie der Class-Path dann aussehen muss, mit . getrennt oder / doch dann frage ich mich was machen Windows Nutzer?)

Code:
Manifest-Version: 1.0
Class-Path: .Pro1.uebung1
Main-Class: MainKlasse

Nochmals Sry für die Triviale Frage hab das ganze auch nachgelesen doch so richtig schöne Erklärungen dazu habe ich keine gefunden :(

LG
 

ocsme

Top Contributor
Ich hab das Prog2 Projekt von mir über Eclipse mal gejart :D
Nun habe ich in der Datei .classpath folgenden Eintrag:
Code:
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/Prog1"/>
Erkennt das Projekt mit einem solchen Eintrag wo er noch die .class Dateien zu suchen hat?
Sprich wenn ich ein größeres Projekt aus mehreren Projekte in eines Packen möchte, packe ich jedes Projekt in eine .jar Datei und diese ganzen .jar Dateien dann später in eine .jar Datei? Denn Eclipse hat ja wenn man den Java Build Path anpasst /Prog1 Projekt z. B. in Prog2 Projekt "eingehängt" den Path in dieser Datei.

Geht das so? oder liege ich wieder Falsch :D

LG
 

mihe7

Top Contributor
Sprich wenn ich ein größeres Projekt aus mehreren Projekte in eines Packen möchte, packe ich jedes Projekt in eine .jar Datei und diese ganzen .jar Dateien dann später in eine .jar Datei?
Das kann man machen (habe ich persönlich noch nie gemacht). Für Eclipse siehe z. B. https://stackoverflow.com/questions...r-with-external-libraries-included-in-eclipse

Statt eines sog. Uber-Jars kann man die Jars separat halten. Dann fügt man im Manifest entsprechende Class-Path-Einträge hinzu und gut ists. Das sollte die IDE automatisch machen, wenn man eine Distribution erstellt.

Wenn man das per Hand machen würde, dann würde man sich z. B. einen Distributions-Ordner anlegen, nennen wir ihn mal dist, dort hätte man dann folgende Struktur:
Code:
dist\haupt-projekt.jar
dist\libs\subprojekt1.jar
dist\libs\subprojekt2.jar
dist\libs\bibliothek1.jar
usw.
Im Manifest des Hauptprojekts (in haupt-projekt gepackt) stünde dann etwas wie
Code:
Class-Path: libs/subprojekt1.jar libs/subprojekt2.jar libs/bibliothek1.jar usw.
 

mrBrown

Super-Moderator
Mitarbeiter
Bevor ich das allerdings per Hand (oder mit IDE) machen würde, würde ich einfach ein Build-Tool wie Maven oder Gradle nutzen, das kümmert sich um das ganze Dependency-Management (neben einigen anderen Vorteilen.)
 

mihe7

Top Contributor
@mrBrown da hast Du natürlich völlig recht. Trotzdem schadet es nicht, zu wissen, was hinter den Kulissen passieren muss.

@ocsme Mal ein Beispiel ganz ohne IDE.

Code:
mkdir greeter
cd greeter
mkdir src
mkdir src/greeter
mkdir build
mkdir dist

Jetzt erstellst Du unter src/greeter eine Datei Greeter.java:
Java:
package greeter;

public class Greeter {
    public void sayHello(String name) {
        System.out.println("Hello " + name);
    }
}

Übersetzen:
Code:
javac -d build src/greeter/Greeter.java

Jetzt findet man unter build die Package-Struktur inkl. des .class-Files. Daraus erstellen wir ein JAR dist/greeter.jar:
Code:
jar -cvf dist/greeter.jar -C build .
(Achtung: da steht ein Punkt am Ende)

Als nächstes legen wir ein zweites Projekt an (analog oben):
Code:
# Projekt-Root greeter verlassen
cd ..
mkdir launcher
cd launcher
mkdir src
mkdir src/launcher
mkdir build
mkdir dist
mkdir dist/libs

Dann brauchen wir eine Java-Klasse, sagen wir mal unter src/launcher/App.java
Java:
package launcher;

import greeter.Greeter;

public class App {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();

        if (args.length == 0) {
            System.err.println("Fehler: kein Name angegeben");
            System.exit(1);
        }

        greeter.sayHello(args[0]);
    }
}

Übersetzen (diesmal etwas komplizierter, weil nun die Klassen aus dem greeter-Projekt in den Classpath aufgenommen werden müssen, damit der Compiler diese findet):
Code:
# Möglichkeit 1: Klassen aus Jar verwenden
javac -d build -cp ../greeter/dist/greeter.jar src/launcher/App.java
# Möglichkeit 2: Klassen aus dem build-Verzeichnis verwenden
javac -d build -cp ../greeter/build src/launcher/App.java

In build findet sich nun die Paketstruktur inkl. der Klasse Launcher. Jetzt wollen wir ein executable Jar daraus machen. Dafür brauchen wir ein Manifest, das wir einfach mal als Manifest.txt direkt im Projektverzeichnis anlegen:
Code:
Main-Class: launcher.App
Class-Path: libs/greeter.jar
Jetzt das Jar bauen:
Code:
jar -cvfm dist/launcher.jar Manifest.txt -C build .
(Achtung wieder ein Punkt am Ende)
Abschließend muss man noch die greeter.jar nach dist/libs kopieren.

Jetzt kann man die Anwendung z. B. per
Code:
java -jar dist/launcher.jar ocsme
aufrufen.

Nachtrag: ausgeliefert würde dann der Inhalt des dist-Verzeichnisses, also
Code:
launcher.jar
libs/greeter.jar
 

ocsme

Top Contributor
Das ganze werde ich morgen ausprobieren.
Danke für die große Mühe :)

Eine aller letzte kleine Frage habe ich heute Abend noch "denke ich werde sie erst morgen lesen!" muss Schlafen gehen mir fallen die Augen zu :D
Wo sehe ich den in Eclipse den Class-Path? Ich nutze Ubuntu deswegen musste ich damit bis jetzt noch so gut wie nichts tun :p

LG
 

mihe7

Top Contributor
Wo sehe ich den in Eclipse den Class-Path?
Ich weiß gar nicht, ob man sich den explizit anzeigen lassen kann (in Eclipse sowieso nicht, weil ich die IDE nicht verwende). Im Classpath befindet sich aber nichts anderes als die Klassen des Projekts und alle Abhängigkeiten. Dabei unterscheidet die IDE normalerweise noch zwischen dem Classpath, der zur Übersetzungszeit und dem, der zur Laufzeit verwendet wird.

Warum? Weil ein JDBC-Treiber nur zur Laufzeit, nicht aber zur Übersetzungszeit benötigt wird.

Außerdem kann es noch Unterschiede zwischen verschiedenen "Profilen" geben. Beispielsweise: Test und Nicht-Test.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
java-starter Erste Schritte import von package Java Basics - Anfänger-Themen 4
D Bitte um Hilfe bei "error: package com.apple.eawt does not exist import com.apple.eawt.*;" Java Basics - Anfänger-Themen 1
Q Classpath Package import Java Basics - Anfänger-Themen 6
F import Statement für Klassen die dem default Package zugeordnet sind? Java Basics - Anfänger-Themen 2
C import von Java Klasse ohne package Java Basics - Anfänger-Themen 10
M Hilfe zu package und import Java Basics - Anfänger-Themen 6
I package, import und Vererbung mit static Java Basics - Anfänger-Themen 8
D Apache.Xerces unter Eclispe? import/plugin/package? Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
A OOP Komposition per Package-Sichtbarkeit Java Basics - Anfänger-Themen 2
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
P Maven-Dependencies (package org.apache.http.nio does not exist) Java Basics - Anfänger-Themen 6
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
H Was sind Package bei eclipse? Java Basics - Anfänger-Themen 1
V Datentypen Default Package Java Basics - Anfänger-Themen 1
J Datei im Package zur Laufzeit editieren Java Basics - Anfänger-Themen 1
L Java Package View Java Basics - Anfänger-Themen 6
T Compiler-Fehler Eclipse: leerer Package Explorer Java Basics - Anfänger-Themen 4
L Eine Klasse aus dem gleichen Package starten Java Basics - Anfänger-Themen 3
Clarence Weinberg Eclipse: Package wird erst nach Neustart aktuallisiert Java Basics - Anfänger-Themen 1
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
Z AWT package -> keine Konsole? Java Basics - Anfänger-Themen 2
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
G eigenes package Java Basics - Anfänger-Themen 3
N Fehler beim importieren vom package Java Basics - Anfänger-Themen 2
T Erste Schritte run innerhalb eines package Java Basics - Anfänger-Themen 1
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
D Subpackage / Package in Package Java Basics - Anfänger-Themen 6
D Ein Icon ohne Pfad sondern mit Package. Java Basics - Anfänger-Themen 4
P Zip in package speichern/auslesen? Java Basics - Anfänger-Themen 4
M Erste Schritte package-Deklaration, Problem Java Basics - Anfänger-Themen 6
Ananaskirsche Methoden Auf Methode in anderem Package zugreifen Java Basics - Anfänger-Themen 3
S Funktionen/Atrribute nur innerhalb einer package Zugänglich machen Java Basics - Anfänger-Themen 8
J BlueJ öffnet package falsch Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
OnDemand Package Anweisungen Java Basics - Anfänger-Themen 3
L Package wird nicht richtig importiert Java Basics - Anfänger-Themen 4
LittleJavaCup Zugriff auf Klasse von package Java Basics - Anfänger-Themen 3
S Datei in Package ablegen Java Basics - Anfänger-Themen 11
B Definieren von package scope Java Basics - Anfänger-Themen 2
B JAVA Package Problem Java Basics - Anfänger-Themen 8
J Java Package - HelloWorld Java Basics - Anfänger-Themen 10
F Eigenes Package - Variable exportieren Java Basics - Anfänger-Themen 11
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
H Innerhalb eines Package wird eine Klassenmethode nicht gefunden. Java Basics - Anfänger-Themen 2
S Ordner / Package Struktur bei größerem Projekt? Java Basics - Anfänger-Themen 8
S Classpath Externes Package einbinden (zip-Datei) Java Basics - Anfänger-Themen 9
J Kompilieren mit Package funktioniert nicht Java Basics - Anfänger-Themen 40
L aus package auf klasse Ausserhalb des package zugreifen, wie? Java Basics - Anfänger-Themen 8
Luk10 Package Namen Java Basics - Anfänger-Themen 5
F Mit javac Package compilieren Java Basics - Anfänger-Themen 3
N Probleme mit dem Erstellen eines package Java Basics - Anfänger-Themen 6
Q Aufruf einer Klasse in einem Package Java Basics - Anfänger-Themen 7
P Nachträglich Klasse zu Package hinzufügen Java Basics - Anfänger-Themen 16
B Interface Nach "package"-Nennung keine Toolbar-Icons mehr Java Basics - Anfänger-Themen 5
S Classpath package unbekannt Java Basics - Anfänger-Themen 5
G Package Java Basics - Anfänger-Themen 5
T Applet init() funktioniert nur im default package Java Basics - Anfänger-Themen 5
C Package einbinden - "cannot access" Java Basics - Anfänger-Themen 5
B Eigenes Package Java Basics - Anfänger-Themen 6
F Zugriff auf Instanzobjekte - Package does not exist Java Basics - Anfänger-Themen 10
M Problem mit package und Vererbung Java Basics - Anfänger-Themen 6
S Wie sollte man Package bezeichnen Java Basics - Anfänger-Themen 2
B package benutzen Java Basics - Anfänger-Themen 6
S Package in Java Java Basics - Anfänger-Themen 5
E Welcher Package Name bei Eclipse/Android? Java Basics - Anfänger-Themen 2
D package javax.comm does not exist Java Basics - Anfänger-Themen 5
M Package Namen ändern Java Basics - Anfänger-Themen 3
Luk10 package system does not exsist Java Basics - Anfänger-Themen 2
B Matrix package ? Java Basics - Anfänger-Themen 7
S OOP package Deklaration Java Basics - Anfänger-Themen 4
P ArrayList<E> in package java.util Java Basics - Anfänger-Themen 4
N static package de.hallo; ??? Java Basics - Anfänger-Themen 4
M package in Netbeans IDE Java Basics - Anfänger-Themen 3
L ClassLoader - Daten aus einem Package laden Java Basics - Anfänger-Themen 3
A Nicht verwendete Klassen aus großem Package löschen Java Basics - Anfänger-Themen 9
G package im bin ordner Java Basics - Anfänger-Themen 2
A Erstellener einer Jar Datei mit eigenem Package Java Basics - Anfänger-Themen 9
B package org.jdesktop.layout does not exist Java Basics - Anfänger-Themen 8
I Listener Klassen in Package Java Basics - Anfänger-Themen 3
K Bilder/Dateien aus package einlesen Java Basics - Anfänger-Themen 14
S package problem Java Basics - Anfänger-Themen 2
E Read a file in a package Java Basics - Anfänger-Themen 2
M Was versteht man unter Java einen Package ? Java Basics - Anfänger-Themen 17
F package erstellen Java Basics - Anfänger-Themen 4
M Fehler: package javax.portlet does not exist Java Basics - Anfänger-Themen 2
G problem mit package Java Basics - Anfänger-Themen 15
G Kein EJB-Package vorhanden Java Basics - Anfänger-Themen 2
S API laden problem mit package Java Basics - Anfänger-Themen 2
G ressourcen in anderem Package Java Basics - Anfänger-Themen 9
G Package in JBuilder einbinden wirft tausende Fehler aus Java Basics - Anfänger-Themen 15
N package Problem Java Basics - Anfänger-Themen 3
V Unbekannte Klassen aus einem Package laden? Java Basics - Anfänger-Themen 4
G Servlet Package wo herunterladen? Java Basics - Anfänger-Themen 2
G kann Klassen aus eigenem Package nicht verwenden Java Basics - Anfänger-Themen 15
B Umwandlung gemäß Package-Anweisung Java Basics - Anfänger-Themen 5
G Wofür com package? + Welche eclipse - Plug Ins? Java Basics - Anfänger-Themen 3
I Methode aus zweitem Package aufrufen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben