2016-06-17 2 views
0

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 ??

+1

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

+2

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

+0

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

Antwort

0

Es ist nicht möglich die Klasse von einer lokalen Java-Datei Zugriff auf ohne es in Java zu importieren. Selbst wenn Sie diese Java-Datei in das JRE/lib/ext-Verzeichnis kopieren, auf das Sie in einer anderen Klasse zugreifen möchten, bedeutet dies nicht, dass die erforderliche Klasse nicht zum Standardklassenpfad hinzugefügt wird.

Verwandte Themen