Bugs bei Packages #322

Closed
opened 2024-04-17 19:55:26 +00:00 by i21023 · 1 comment
Collaborator

Beim der Implementierung scheint es noch kleine Bugs (bzw. Fälle die nicht berücksichtigt wurden) zu geben.

Gegeben ist folgende Pakethierarchie, wobei src das root dir der Pakethierarchie ist:
In der Klasse Bar wird ein Objekt von Foo erstellt.

.
└── src
    └── main
        └── p1
            ├── Bar.jav
            └── Foo.jav

1

Hier handelt es sich eher um ein convenience Vorschlag. Bei javac wird automatisch das aktuelle working dir in den classpath aufgenommen. Beim Java-TX Compiler muss man diesen aktuell immer manuell angeben.

Folgendes funktioniert also nicht:
$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar src/main/p1/Bar.jav

Man muss explizit das aktuelle Arbeitsverzeichnis angeben, damit Foo.jav von Bar.jav gefunden werden kann:
$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar -cp "." src/main/p1/Bar.jav

2

Wenn man den Classpath nun manuell angegeben hat, findet der Compiler Foo.jav und compiliert die Klasse, um sie in Bar.jav verwenden zu können. Foo.class liegt nun also im korrekten Ordner.

.
└── src
    └── main
        └── p1
            ├── Bar.jav
            ├── Foo.class
            └── Foo.jav

Dann kommt es zum nächsten Problem. Der Compiler versucht Foo.class einzulesen, findet allerdings die Datei nicht. Ich denke hier ist einfach ein Bug im Code.
Exception in thread "main" java.lang.ClassNotFoundException: src.main.p1Foo

Damit man beide Klassen ohne Fehler compilieren kann, muss man für die Classfiles eine extra output dir angeben, sodass die Classfiles nicht neben die Sourcefiles gelegt werden.

Folgendes funktioniert also:
$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar -d "out" -cp "." src/main/p1/Bar.jav

.
├── out
│   └── src
│       └── main
│           └── p1
│               ├── Bar.class
│               └── Foo.class
└── src
    └── main
        └── p1
            ├── Bar.jav
            └── Foo.jav

Das bedeutet aber, dass man aktuell die Classfiles und Sourcefiles nicht nebeneinander liegen haben kann, da es dann wie gesagt wohl zu Problemen mit dem Einlesen des Classfiles gibt.

Beim der Implementierung scheint es noch kleine Bugs (bzw. Fälle die nicht berücksichtigt wurden) zu geben. Gegeben ist folgende Pakethierarchie, wobei src das root dir der Pakethierarchie ist: In der Klasse Bar wird ein Objekt von Foo erstellt. ``` . └── src └── main └── p1 ├── Bar.jav └── Foo.jav ``` ### 1 Hier handelt es sich eher um ein convenience Vorschlag. Bei javac wird automatisch das aktuelle working dir in den classpath aufgenommen. Beim Java-TX Compiler muss man diesen aktuell immer manuell angeben. Folgendes funktioniert also nicht: `$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar src/main/p1/Bar.jav ` Man muss explizit das aktuelle Arbeitsverzeichnis angeben, damit Foo.jav von Bar.jav gefunden werden kann: `$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar -cp "." src/main/p1/Bar.jav` ### 2 Wenn man den Classpath nun manuell angegeben hat, findet der Compiler Foo.jav und compiliert die Klasse, um sie in Bar.jav verwenden zu können. Foo.class liegt nun also im korrekten Ordner. ``` . └── src └── main └── p1 ├── Bar.jav ├── Foo.class └── Foo.jav ``` Dann kommt es zum nächsten Problem. Der Compiler versucht Foo.class einzulesen, findet allerdings die Datei nicht. Ich denke hier ist einfach ein Bug im Code. `Exception in thread "main" java.lang.ClassNotFoundException: src.main.p1Foo` Damit man beide Klassen ohne Fehler compilieren kann, muss man für die Classfiles eine extra output dir angeben, sodass die Classfiles nicht neben die Sourcefiles gelegt werden. Folgendes funktioniert also: `$ java -jar JavaTXcompiler-2.3-jar-with-dependencies.jar -d "out" -cp "." src/main/p1/Bar.jav` ``` . ├── out │ └── src │ └── main │ └── p1 │ ├── Bar.class │ └── Foo.class └── src └── main └── p1 ├── Bar.jav └── Foo.jav ``` Das bedeutet aber, dass man aktuell die Classfiles und Sourcefiles nicht nebeneinander liegen haben kann, da es dann wie gesagt wohl zu Problemen mit dem Einlesen des Classfiles gibt.
Owner

Ich bin mir nicht ganz sicher wie javac sich verhält. Vielleicht kannst du mal die Regeln in ein neues Issue stellen falls es noch nicht klappt.

Ich bin mir nicht ganz sicher wie javac sich verhält. Vielleicht kannst du mal die Regeln in ein neues Issue stellen falls es noch nicht klappt.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#322
No description provided.