과 함께 읽으면 런타임 중에 컴파일 된 클래스의 컴파일러 정보 (Java 버전 및 32 또는 64 비트)를 가져올 수 있습니까? jar 파일의 명령 줄 내에서 가능하다는 것을 알고 있지만 런타임 중에 가능합니까?런타임 중에 컴파일 된 정보를 Java
해당 정보로 내 응용 프로그램을 시작할 때 로그 항목을 만들려고합니다.
감사 Hauke
과 함께 읽으면 런타임 중에 컴파일 된 클래스의 컴파일러 정보 (Java 버전 및 32 또는 64 비트)를 가져올 수 있습니까? jar 파일의 명령 줄 내에서 가능하다는 것을 알고 있지만 런타임 중에 가능합니까?런타임 중에 컴파일 된 정보를 Java
해당 정보로 내 응용 프로그램을 시작할 때 로그 항목을 만들려고합니다.
감사 Hauke
을 -하지만 유용 할 수 있습니다 : 예를 들어이 옵션을 선택합니다 시작하는 두 개의 부호없는 짧은 정수 :
는당신이 생성하는 모든 을 .class 파일에 버전의 스탬프을 포함 0xCAFEBABE 매직 번호 바로 뒤에있는 바이트 오프셋 4.
클래스 형식의 주/부 버전 번호입니다.
public class MyClass {
public static void main(String[] args) throws IOException, URISyntaxException {
String className = MyClass.class.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = MyClass.class.getClassLoader().getResourceAsStream(classAsPath);
byte[] buffer = new byte[8];
int r = stream.read(buffer);
if (r < 8) {
throw new IOException("Something wrong we could read only " + r + " bytes");
}
int major = buffer[6];
int minor = buffer[7];
int version = (major << 8);
version = version | minor;
System.out.printf("Version (major %X, minor %X) -> %X", major, minor, version);
}
}
은 그럼 당신은 JDK 버전으로 바이트 코드 버전지도 :
이것은 컴파일러에 관한 정보가 아니라 바이트 코드 버전만을 제공합니다. – fge
당신은 런타임 유지와 사용자 정의 주석을 만들 수 있습니다. 이 컴파일러하지만 바이트 코드의 버전이 아닙니다 Java 1.5.0.12 and custom Annotations at Runtime
컴파일 된 클래스 "는 32 비트 또는 64"이 아니다.
바이트 코드는 같습니다.
"jar 파일의 명령 줄에서"< "- 질문을 편집하고 사용하는 명령과 출력을 표시 할 수 있습니까? – fge
당신의 질문은 컴파일 된 클래스가 32 비트와 64 비트에서 동일하기 때문에 이해가되지 않습니다. 런타임을 결정할 수있는 것은 32 비트 또는 64 비트가 될 수있는 JVM 정보입니다. – eis