Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich versuche gerade auf einen anderen Projektfad zuzugreifen.
Das sieht ungefähr so aus:
Test/src/main/test.java (meine eigentliche Klasse mit der ich versuche auf die andere zuzugreifen)
Test2/src/Entities/test2.java
Java:
private static final String ENTITIES_PACKAGE=test2.class.getPackage().getName();
private static final String ENTITIES_DIR="???/src/" + ENTITIES_PACKAGE.replace('.', '/');
Ich benutze Eclipse (RSA) und habe das Projekt Test2 dem Projekt Test schon per Eigenschaften -> Buildpath hinzugefügt.
Jetzt fragt sich wie die ENTITIES_DIR aussieht damit ich auf das andere Projekt zugreifen kann.
Mit den beiden Konstanten wird dann weitergerabeitet, um nach Entites zu suchen. Das funktioniert auch wunderbar im eigenen Projekt. Nun möchte ich aber andere Projekte danach durchsuchen.
Ich habe zwei völlig unabhängige Projekte. D.h. ich habe ein Projekt Test mit dem Package main und ein Projekt Test2 mit dem Package Entities. Mit dem einen Projekt will ich das andere Projekt nach Entities durchsuchen, dazu bräuchte ich doch einen Projektpfad zu dem anderen Projekt?
Wenn deine Projekte fertig sind, wirst du wohl den Quellcode kaum mitausliefern und deswegen bringt dir ein Pfad der mit src beginnt gar nix, sondern du wirst Jars ausliefern, und in Jars gibt es keine Dateien, sondern nur Entries.
Das soll auch alles innerhalb der IDE (RSA) funktionieren. Mir geht es nur darum, wie ich jetzt innerhalb der IDE auf das andere Projekt zugreifen kann.
projekte kennen sich gegenseitig nicht, sie liegen zwar im selben workspace, aber wenn du den projektnamen (was über java + eclipse so nicht geht) nicht rausbekommst, kommst du nicht ins nachbarprojekt.
Bei der Ausgabe von ENTITIES_DIR am Ende bekomme ich dann auch den korrekten Pfad:
C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/src/Entities
bekomme aber dann:
Code:
Exception in thread "main" java.lang.NullPointerException
at main.Auslesen.EntityAnnotation(Auslesen.java:126)
Habe es dann auch mal mit ClassLoader versucht:
Java:
public class InspectClass {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws ClassNotFoundException, MalformedURLException {
System.out.println("test");
File fileDir = new File("C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/bin/Entities/");
//File customElementsDir = new File("D:\\customElements");
URL[] urls = null;
try {
URL url = fileDir.toURI().toURL();
urls = new URL[] { url };
URLClassLoader ucl = new URLClassLoader(urls);
Class c = ucl.loadClass("IndependentClass"); // LINE 14
for(Field f: c.getDeclaredFields()) {
System.out.println("Field name" + f.getName());
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
scheitere aber genauso und bekomme folgende Fehlermeldung:
Code:
Exception in thread "main" java.lang.ClassNotFoundException: IndependentClass
at java.net.URLClassLoader.findClass(URLClassLoader.java:419)
at java.lang.ClassLoader.loadClass(ClassLoader.java:643)
at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
at main.InspectClass.main(InspectClass.java:22)
Bei der Ausgabe von ENTITIES_DIR am Ende bekomme ich dann auch den korrekten Pfad:
C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/src/Entities
bekomme aber dann:
Code:
Exception in thread "main" java.lang.NullPointerException
at main.Auslesen.EntityAnnotation(Auslesen.java:126)
da kommt aber "C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/./C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/src/Entities" raus
lass das "." parent weg
Wie jede andere Klasse auch und dann musst du halt in deinem Classloader (das ist btw kein Anfängerkram) entsprechend den Pfad anhand des Canonical Path der Klasse auflösen und das File laden.
Also hier mein Code (vorher hatte ich im Pfad den letzten Slash vergessen):
Java:
public class InspectClass {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws ClassNotFoundException, MalformedURLException {
System.out.println("test");
File fileDir = new File("C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/bin/Entities/");
URL[] urls = null;
try {
URL url = fileDir.toURI().toURL();
System.out.println(url);
urls = new URL[] { url };
URLClassLoader ucl = new URLClassLoader(urls);
Class c = ucl.loadClass("Mitarbeiter");
for(Field f: c.getDeclaredFields()) {
System.out.println("Field name" + f.getName());
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Fehlermeldung (irgendwas stimmt mit Mitarbeiter nicht, wegen dem wrong name):
Code:
test
file:/C:/Documents%20and%20Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/bin/Entities/
Exception in thread "main" java.lang.NoClassDefFoundError: Mitarbeiter (wrong name: Entities/Mitarbeiter)
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:265)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:493)
at java.net.URLClassLoader.access$300(URLClassLoader.java:64)
at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:892)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at java.net.URLClassLoader.findClass(URLClassLoader.java:414)
at java.lang.ClassLoader.loadClass(ClassLoader.java:643)
at java.lang.ClassLoader.loadClass(ClassLoader.java:609)
at main.InspectClass.main(InspectClass.java:23)
File fileDir = new File("C:/Documents and Settings/DerSchokoBaer/IBM/rationalsdp/workspace/RSATest1/bin/");
Class c = ucl.loadClass("Entities.Mitarbeiter");