kompilieren mit J2SE 1.4



  • Hi,

    folgendes Szenario in stark vereinfachter Form:

    MyApp.java:
    [java]
    import myPackage;

    public class MyApp {
    // ...
    public static void main (String[] args) {
    MeineKlasse mk = new MeineKlasse();
    // ...
    }
    }[/code]
    MeineKlasse.java
    [java]
    package myPackage;

    public class MeineKlasse {
    // ...
    public MeineKlasse() {
    // ...
    meineMethode();
    }
    void meineMethode() {
    MeineHilfsKlasse mhk = new MeineHilfsKlasse();
    // ...
    }
    }[/code]
    MeineHilfsKlasse.java
    [java]
    package myPackage;

    class MeineHilfsKlasse {
    // ...
    }[/code]

    Wenn ich jetzt das ganze mit

    javac MyApp.java
    

    kompiliere, sollte der Compiler doch eigentlich zuerst MeineHilfsKlasse.java, dann MeineKlasse.java und zuletzt MyApp.java kompilieren. Und sobald eines der drei SourceFiles geändert wird, sollte das geänderte und evtl. abhängige (übergeordnete) Dateien ebenfalls bei einem neuerlich Kompilieraufruf kompiliert werden.

    Ich habe also eine Applikation erstellt, bei der das File, das hier MeineHilfsKlasse.java wäre, nicht neu kompiliert wird, wenn ich an dem Quellcode etwas ändere.
    Nun sind die Files MeineKlasse.java und MeineHilfsKlasse.java GUI-Files, die mit Swing arbeiten. Ein Problem, das ich habe, ist, daß der Fensterinhalt aus >MeineHilfsKlasse.java< nicht korrekt dargestellt wird, was ich nach mehrfacher Überprüfung des Quellcodes darauf zurückführe (eine andere Fehlerquelle fällt mir nämlich echt nicht mehr ein).

    Nun eben meine Frage: woran kann es liegen, daß MeineHilfsKlasse.java nicht neukompiliert wird, nachdem es geändert wurde?
    Die obige Konstellation entspricht quasi dem, wie die Beziehungen in meiner Applikation vorliegen.



  • Dass der Compiler alle neue Klassen erneut kompiliert bei einer Änderung halte ich für ein Gerücht. Der Compiler sucht nach einer .class-Datei und sobald er sie findet ist für ihn alles okay solange er die Methoden die aufgerufen werden findet. Die IDEs machen hierfür ein Change-Management und kompilieren dann die geänderten Dateien nochmal.



  • Wenn du keine IDE verwendest, dann kannst du einfach mittels javac *.java compilieren. Mit einer IDE geht's aber einfachen.



  • Hi,

    ich habe das irgendwo gelesen, daß sich der Compiler das zusammensucht - klappt bei mir bis auf diese eine Datei auch übrigens hervorragend!

    mit javac *.java erzielt man doch recht wenig Erfolge, wenn man mit einer ganzen Paket-Struktur arbeitet.... also doch eine Makefile schreiben....



  • ich habe das irgendwo gelesen, daß sich der Compiler das zusammensucht

    Stimmt auch. Siehe dazu CengizS's Erklärung. Wenn er die Klasse und darin die gewünschte Methode findet, dann ignoriert er es einfach.

    also doch eine Makefile schreiben....

    Oder einfacher ne IDE nehmen...


Anmelden zum Antworten