Как найти полный путь импорта по имени класса с помощью инструмента линии comnad? - PullRequest
0 голосов
/ 06 июня 2018

С помощью javap я могу сделать это:

xb@dnxb:/tmp$ javap 'java.util.Base64'
Compiled from "Base64.java"
public class java.util.Base64 {
  public static java.util.Base64$Encoder getEncoder();
  public static java.util.Base64$Encoder getUrlEncoder();
  public static java.util.Base64$Encoder getMimeEncoder();
  public static java.util.Base64$Encoder getMimeEncoder(int, byte[]);
  public static java.util.Base64$Decoder getDecoder();
  public static java.util.Base64$Decoder getUrlDecoder();
  public static java.util.Base64$Decoder getMimeDecoder();
}
xb@dnxb:/tmp$ 

Но как мне искать по имени класса, не зная, что он находится в java.util. *?(с утилитой командной строки без Java-кодирования)

xb@dnxb:/tmp$ javap 'Base64'
Error: class not found: Base64
xb@dnxb:/tmp$ javap '*.Base64'
Error: class not found: *.Base64
xb@dnxb:/tmp$ javap '*Base64'
Error: class not found: *Base64
xb@dnxb:/tmp$

1 Ответ

0 голосов
/ 06 июня 2018

Я понял, что могу создать свою карту следующим образом:

xb@dnxb:/tmp$ java -verbose |& grep rt.jar | head -1 #to find out java runtime path
[Opened /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
xb@dnxb:/tmp$ unzip /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar -d /tmp/rt #unzip the rt.jar
   creating: /tmp/rt/META-INF/
 extracting: /tmp/rt/META-INF/MANIFEST.MF  
 extracting: /tmp/rt/com/oracle/net/Sdp$1.class  
 extracting: /tmp/rt/com/oracle/net/Sdp$SdpSocket.class
...
 extracting: /tmp/rt/java/io/Serializable.class  
 extracting: /tmp/rt/java/lang/String.class  
 extracting: /tmp/rt/java/lang/Object.class  
xb@dnxb:/tmp$ 
xb@dnxb:/tmp$ find /tmp/rt > /tmp/rt.map #create list path as map
xb@dnxb:/tmp$ 

, а затем grep (возможно, лучше сделать это как функцию оболочки):

xb@dnxb:/tmp$ grep -rni Base64\.class /tmp/rt.map 
1839:/tmp/rt/java/util/Base64.class
2276:/tmp/rt/java/util/prefs/Base64.class
10340:/tmp/rt/com/sun/xml/internal/messaging/saaj/util/Base64.class
13363:/tmp/rt/com/sun/org/apache/xml/internal/security/utils/Base64.class
15044:/tmp/rt/com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV$XBase64.class
15096:/tmp/rt/com/sun/org/apache/xerces/internal/impl/dv/util/Base64.class
xb@dnxb:/tmp$ 

Примечаниечто /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/classlist включает только ~ 2559 строк, в отличие от ~ 20706 строк в /tmp/rt.map, поэтому я не могу направить файл grep classlist.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...