Ich habe eine Java-Datei platziert und kompiliert es mit einer Hauptmethode in JRE/lib/ext-Verzeichnis. Ich möchte von einer lokalen Java-Datei auf die Datei zugreifen, ohne auf den Import in Java hinzuweisen.können die Java-Dateien in JRE/lib/ext dir für die Ausführung eines Java-Programms verwendet werden
C:\Program Files\Java\jre1.8.0_60\lib\ext>cat TestClass.java
class TestClass
{
public void displayMessage()
{
System.out.println("Hello World of Trials");
}
}
C:\Program Files\Java\jre1.8.0_60\lib\ext>javac TestClass.java
C:\Program Files\Java\jre1.8.0_60\lib\ext>ls -lrt TestClass.*
-rwxrwxr--+ 1 Madhuri None 103 Jun 17 12:23 TestClass.java
-rwxrwx---+ 1 Administrators None 418 Jun 17 12:25 TestClass.class
C:\Program Files\Java\jre1.8.0_60\lib\ext>
C:\Users\Madhuri\Documents>cat TestArt.java
class TestArt
{
public static void main(String args[])
{
TestClass tc = new TestClass();
tc.displayMessage();
}
}
C:\Users\Madhuri\Documents>javac TestArt.java
TestArt.java:5: error: cannot find symbol
TestClass tc = new TestClass();
^
symbol: class TestClass
location: class TestArt
TestArt.java:5: error: cannot find symbol
TestClass tc = new TestClass();
^
symbol: class TestClass
location: class TestArt
2 errors
C:\Users\Madhuri\Documents>
Flow of class loading for a simple program
Aus der obigen Antwort, ich dachte, es wäre möglich. Ich habe versucht, mit verbose Option zu kompilieren und verstanden, dass es nur JAR-Dateien akzeptiert.
C:\Users\Madhuri\Documents>javac -verbose TestArt.java
[parsing started RegularFileObject[TestArt.java]]
[parsing completed 37ms]
[search path for source files: .]
[search path for class files: C:\Program Files\Java\jdk1.8.0_60\jre\lib\resources.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\rt.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\sunrsasign.jar,C:\Program Files\Java\jdk1.8.0_60
jre\lib\jsse.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\jce.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\charsets.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\jfr.jar,C:\Program Files\Java\jdk1.8.0_60\jre\classes,C:\Prog
am Files\Java\jdk1.8.0_60\jre\lib\ext\access-bridge-64.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\cldrdata.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\dnsns.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\jacce
s.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\jfxrt.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\localedata.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\nashorn.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ex
\sunec.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunjce_provider.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunmscapi.jar,C:\Program Files\Java\jdk1.8.0_60\jre\lib\ext\sunpkcs11.jar,C:\Program Files\Java\jdk1.8
0_60\jre\lib\ext\zipfs.jar,.]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.8.0_60\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.8.0_60\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]]
[checking TestArt]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.8.0_60\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]]
[loading ZipFileIndexFileObject[C:\Program Files\Java\jdk1.8.0_60\lib\ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]]
TestArt.java:5: error: cannot find symbol
TestClass tc = new TestClass();
^
symbol: class TestClass
location: class TestArt
TestArt.java:5: error: cannot find symbol
TestClass tc = new TestClass();
^
symbol: class TestClass
location: class TestArt
[total 570ms]
2 errors
C:\Users\Madhuri\Documents>
Benötige ich eine JAR-Datei in ext dir erstellen sie automatisch zu laden, oder sonst ist es eine Möglichkeit, eine Klassendatei direkt vom Programm zu laden ??
Dies kann ein X/Y-Problem sein. Kannst du beschreiben, warum du den Import verstecken willst und es so aussehen lässt, als ob deine Klasse zur JRE gehört? – Fildor
Siehe: [Der Erweiterungsmechanismus] (https://docs.oracle.com/javase/tutorial/ext/). Jars in 'jre/lib/ext' werden automatisch zum Klassenpfad hinzugefügt. Aber das ist nicht der "normale" Weg, um dem Klassenpfad Jars hinzuzufügen, daher empfehle ich diesen Mechanismus nicht. Das Problem dabei ist, dass diese JAR-Dateien zu ** allen ** Java-Programmen hinzugefügt werden, die auf Ihrem Computer laufen, und das ist keine gute Idee. Stellen Sie stattdessen sicher, dass sich das benötigte jar im Klassenpfad befindet, wenn Sie Ihre Anwendung ausführen. – Jesper
Ich möchte einige Standardmethoden in Java erstellen, um meine Aufgaben zu vereinfachen, und ich möchte, dass sie für alle meine Programme verfügbar sind. – Mallesh