selber Klassen kompilieren/ prüfen

Evils

Neues Mitglied
Hallo liebes Java Forum,

gerade angemeldet und eigentlich geplant hier den ersten Post zu machen, jetzt wirds doch der zweite :lol:

Ich komme mit etwas Verzweiflung auf der Suche nach Hilfe zu euch, denn mein momentanes Projekt das ich gerade in meiner Praxisphase bearbeiten darf scheint mir noch den letzten Nerv zu rauben ;(


Nehmen wir mal an ich habe ein Programm welches es dem User erlaubt zur Laufzeit neue Klasse zu importieren bzw. zu spezifizieren. Diese Klassen (samt Methoden, Variablen usw,) bekomme ich also zur Laufzeit meines Programms als String geliefert.
Nun erlaube ich so auch dem User ganze OOP Strukturen wie Vererbung, Abstract usw. dort mit einzubauen. Da aber die lieben User min. so oft Fehler machen wie ich, möchte ich diese Strukturen ja überprüfen bevor ich am Ende daraus versuche ein Ergebnis oder ähnliches zu erzeugen.

Gehen wir also von dem Beispiel aus der User liefert folgende zwei Strings ein:

"abstract class AbstractComponent { public abstract void a () ; }"," public class ConcreteComponentA extends AbstractComponent {}"

Dann sollte das Ergebnis natürlich sein, das ich einen Fehler erhalte bezüglich der fehlenden Implementierung der Methode a.



Meine ersten Versuche gingen bisher in Richtung Bytecode Instrumentierung, insofern das ich aus den Strings Klassen & Methoden per Javassist erstellt habe und daraufhin eine Verifikation erhofft hatte, da dies auch kein Erfolg brachte hatte ich angefangen mit JustIce dem Bytecode Verifier von BCEL zu arbeiten, was auch keine Lösung brachte da hier auf alles andere aber nicht das gewünschte gecheckt wurde.

Nach einigen Fragen im Stackoverflow hatte ich dann den Weg über den ClassLoader gesucht, allerdings hatte hier auch keine gewünschte Prüfung stattgefunden...

JUnit Tests oder ähnliches kommen leider nicht in Frage da ich ja nicht im vorraus sagen kann was der User für Ideen in die Strings einbaut ...


Meine letzte Idee und Hoffnung wäre nun die Kompilierung über einen internen Compiler zur Runtime aus dem Memory, allerdings waren die ersten Tests bezüglich der gewünschten "Fehler" eher ernüchternt.


Vielleicht noch ein kleiner Hinweis, mir geht es nicht darum die Integrität des Bytecodes oder der Methodendefinitionen zu prüfen, da diese sowieso immer leer sein sollten, es geht hier wirklich essentiell darum Klassenstrukturen wie Vererbung und derartiges zu prüfen!


Vielen Dank für die Bemühungen und Hilfsversuche

Gruß
Evils
 
Zuletzt bearbeitet von einem Moderator:

freez

Top Contributor
Nehmen wir mal an ich habe ein Programm welches es dem User erlaubt zur Laufzeit neue Klasse zu importieren bzw. zu spezifizieren.

Wie machst du das? Ich bin vielleicht nicht auf dem neuesten Stand oder verstehe grad nicht worauf du hinaus willst, aber soweit ich weiß muss mein Programm die Klasse kennen um eine Instanz zu erstellen. Somit steht doch das KlassenKonstrukt zur Laufzeit fest.

Was anderes sind Plugins, allerdings legst du auch da den Grundaufbau fest, und den kennt dein Programm (z.B. mit Interfaces).
 
Zuletzt bearbeitet:
S

SlaterB

Gast
@Evils
du hast doch schon ne Menge aufgelistet,
natürlich kann man irgendwie selber kompilieren starten und dann vielleicht Fehler anschauen
(ich weiß es nicht, aber muss sich ja finden lassen)
du sprichst von Javassist und Bytecode.., hast du nicht schon alles abgedeckt?
was könnte hier noch neues aufgedeckt werden oder geht es dir um intensive Details zu diesem kleinen Fachgebiet?

ich habe mir noch erlaubt den Titel zu ändern, vormals
> Überprüfung von OOP Konstrukten zur Laufzeit einer nachträglich geladenen Klasse

falls nicht gut, dann wieder ändern oder Bescheid sagen
 

knucki

Aktives Mitglied
URLClassLoader könnte auf jeden Fall einen Ansatz bieten.

Allerdings weiss ich im Moment nicht, wie es da mit dem Prüfen aussieht.
 

irgendjemand

Top Contributor
ich denke TO meint hier bewusst das "runtime compiling" ...
das geht erstmal nur wenn JDK verfügbar und damit die "tools.jar" vorhanden ist ...
dann muss diese auch noch im CP liegen *zur not über URLClassLoader und/oder ServiceLoader nachladen* ...
dann muss man das eingegebene als Code darstellen und schickt es durch den compiler ...
dessen auswertung kann man abfangen und dem user präsentieren ... da muss man nichts selbst machen was der compiler schon erledigt
 

Evils

Neues Mitglied
ich denke TO meint hier bewusst das "runtime compiling" ...
das geht erstmal nur wenn JDK verfügbar und damit die "tools.jar" vorhanden ist ...
dann muss diese auch noch im CP liegen *zur not über URLClassLoader und/oder ServiceLoader nachladen* ...
dann muss man das eingegebene als Code darstellen und schickt es durch den compiler ...
dessen auswertung kann man abfangen und dem user präsentieren ... da muss man nichts selbst machen was der compiler schon erledigt

Ja ich denke genau das ist es!

Ich bitte meine vielleicht schlechte Darstellung meines Problems zu entschuldigen, das Problem ist eben leider das ich nicht zuviel verraten darf was dieses Projekt angeht, weshalb ich versucht hatte das ganze ein bisschen abstrakt darzustellen!

Jetzt aber wieder zum Problem.

Also wäre der sinnvolle Weg doch der über den Eclipse/Java Compiler um eine derartige Verifikation zu bekommen...

Mein Problem ist nämlich wirklich nicht das Laden der Klasse oder instanzieren später, denn das wird wahrscheinlich gar nicht benötigt, sondern nur die Prüfung ob die im String genutzten Strukturen wirklich auch den OOP Strukturen entsprechen und hier keine Verletzung stattfindet. Das ganze dient nachher einer etwas komplexeren Verwaltung/Remote Execution Einheit.

Dann lass ich erstmal die Finger von der ClassLoader sache und mach mich weiter an die Compiler Geschichte wenn "irgendjemand" das schon so beschreibt.

Melde mich wieder! Danke erstmal, großartige Community!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
NoahPillich Navigations-App und Wegfindung selber programmieren - Erfahrungen, Ideen, Anregungen Allgemeine Java-Themen 6
N 3D-Grafik 3D Grafik selber bauen Allgemeine Java-Themen 0
volcanos JavaFX-Programme nur in NetBeans selber ausführbar ! command_line: NoClassDefFoundError Allgemeine Java-Themen 39
B hard wrap selber programmieren Allgemeine Java-Themen 9
S Klickbare Stacktraces selber erzeugen..? Allgemeine Java-Themen 9
L Einfache Navigations-App schnell selber Programmieren? Bitte um Ideen und Anregungen. Allgemeine Java-Themen 17
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
E POI-InputStream selber wählen Allgemeine Java-Themen 2
W sql Query abspeichern selber variabele hilfe...? Allgemeine Java-Themen 16
reibi Eclipse PlugIn selber programmieren Allgemeine Java-Themen 3
T einen SVN- oder QVCS-Client selber programmieren Allgemeine Java-Themen 2
T HashMap#get neues Objekt, selber Inhalt Allgemeine Java-Themen 12
M MP3 Datei selber parsen/werte auslesen Allgemeine Java-Themen 13
X JRE selber hosten - legal? Allgemeine Java-Themen 3
I Listener/Event selber machen. Allgemeine Java-Themen 4
N 2 Interfaces mit Methoden selber Signatur implementieren Allgemeine Java-Themen 5
B Java selber lernen Allgemeine Java-Themen 2
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
N abstracte klassen methoden Allgemeine Java-Themen 32
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
B Problem mit meinen Klassen Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
F Code in Klassen bringen Allgemeine Java-Themen 4
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
J Aus mehreren Klassen ein Datei ausführbare machen Allgemeine Java-Themen 6
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
Sin137 Struktur der Klassen & Package Allgemeine Java-Themen 2
G Klassen und interne Klassen Allgemeine Java-Themen 1
S Klassen übergeben Allgemeine Java-Themen 13
C Klassen und Konstruktor Allgemeine Java-Themen 2
S Classpath Wie kann ich Java-Library Klassen "verstecken"..? Allgemeine Java-Themen 4
A Java speech - 2 Klassen Allgemeine Java-Themen 1
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
V Klassenname von allen Klassen mit einer bestimmten Eigenschaft bekommen Allgemeine Java-Themen 2
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
C Arten von Klassen Allgemeine Java-Themen 3
7 Verbinden von Mehreren Klassen Allgemeine Java-Themen 29
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
O Klassen Programm in Klassen unterteilt, werte werden nicht mehr übernommen Allgemeine Java-Themen 3
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
S Polymorphie Polymorphismus bei Abstrakten Klassen Allgemeine Java-Themen 2
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
T Wie kann ich alle existierenden Java-Klassen anzeigen lassen? Allgemeine Java-Themen 10
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
S Kapselung Statische Helper Klassen Allgemeine Java-Themen 5
A Vererbung Klassen-Downcasting wirft ClassCastException Allgemeine Java-Themen 2
N Java Klassen mit ID Allgemeine Java-Themen 21
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
R SecurityManager für einzelne Klassen/Threads? Allgemeine Java-Themen 38
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
S JPA und Entity-Klassen: Wert ungültig Allgemeine Java-Themen 6
M OO / Klassen / Projektstruktur Allgemeine Java-Themen 5
O Klassen werden nicht importiert Allgemeine Java-Themen 3
Z Abstrakte Klassen /Interface Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben