Как я печатаю структуры класса в файле банки с помощью javap инструмента?

Ширина по умолчанию для величины поля экспоненты при отсутствии спецификации в противном случае равна двум. Буква экспоненты E или D отбрасывается, если для величины экспоненты требуется один символ больше, чем поле экспоненты. (Обратите внимание, что эта форма с отсутствующей буквой экспоненты вполне приемлема для форматированного ввода Фортрана.)

Если вы хотите три символа, то укажите три символа.

write(*,fmt='(A,ES15.3E3)') " fmt=ES15.3E3: x = ", x
write(*,fmt='(A,E15.3E3)')  " fmt= E15.3E3: x = ", x   
16
задан Prabhu R 23 July 2009 в 13:00
поделиться

3 ответа

#!/bin/bash
# Set the JAR name
jar=<JAR NAME>
# Loop through the classes (everything ending in .class)
for class in $(jar -tf $jar | grep '.class'); do 
    # Replace /'s with .'s
    class=${class//\//.};
    # javap
    javap -classpath $jar ${class//.class/}; 
done
27
ответ дан 30 November 2019 в 16:19
поделиться

Еще проще было бы

JAR=<path to jarfile> \
javap -classpath $JAR $(jar -tf $JAR | grep "class$" | sed s/\.class$//)
12
ответ дан 30 November 2019 в 16:19
поделиться

Сначала разархивируйте файл jar, это даст ряд каталогов для каждого пакета, затем примените команду javap для каждого каталога.

Так, например, с помощью tomcat вы можете разархивировать catalina-balancer .jar в webapps \ balancer, а затем используйте

javap -classpath org\apache\webapp\balancer Rule

, что дает

Compiled from "Rule.java"
interface org.apache.webapp.balancer.Rule{
    public abstract boolean matches(javax.servlet.http.HttpServletRequest);
    public abstract java.lang.String getRedirectUrl();
}

. Если вам нужно сделать это для всех файлов классов в пакете, вам нужно будет написать сценарий или программу для обхода пути к классам и удаления .class из имен файлов и передать его в javap.

(Было бы довольно просто написать на perl / bash / java).

2
ответ дан 30 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: