gikoha’s blog

個人的メモがわり

Java6

 

Java6

  • ある実行環境が Java6でそれ以上上げられないため (Windows versionのせいか) IntelliJで jarを作っても Java6で動かすことが求められる

  • Java の場合、Project Language Levelで 6に抑えればよい

  • Kotlin の場合、Project Language Levelで 6に抑え、なおかつ Kotlin Compiler Target JVM Version を1.6にしておく gui用にjavaコードが入っていた場合そちらのbytecode versionも6にしておく

  • さて生成された jar のテスト環境だが、これがまた難しい

    • 開発用のJDK8ではテストできないので Java6環境がほしい
  • M1 Macに無理矢理 JDK6を入れる 

    • https://softantenna.com/wp/tips/macos-catalina-apple-java-6/
    • patchをあてれば無理矢理いれることはできるが、一方実行時に swing パーツが表示されなかったり
      Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Non-Java exception raised, not handled! (Original problem: Deprecated in 10_12... DO NOT EVER USE CGSEventRecord directly. Bad things, man.... bad things.)
    • というような呪われたエラーメッセージが出てしまう
    • やむなく cd /Library/Java/JavaVirtualMachines; rm -rf 1.6.0.jdkと削除
  • M1 Macで UTMを走らせ、その上で Windows x86 を走らせてみたが、

    • Windows 2000はCD-ROMブートするものの2段階目で延々ループ状態
    • Windows XP はCD-ROMが立ち上がらない状態
  • Intel Mac上の vmwareで win2000を走らせるのは実機に即していていいが、別マシンが必要

  • M1 Macにdocker経由で linuxを走らせ JDK6を走らせる

    • M1のdocker は x86イメージも作動可能なのです
    • たとえば ubuntu linux+jdk6をダウンロード
      • docker pull enoniccloud/java6
      • CLIログインし java -version
        java version "1.6.0_45"
      • aptソースを日本にする
        sed -i.org -e 's|archive.ubuntu.com|ubuntutym.u-toyama.ac.jp|g' /etc/apt/sources.list
      • apt-get update
      • apt-get install tcsh zip unzip file xterm
      • export DISPLAY=xxx.xxx.xxx.xxx:0としておきかつ.Xauthorityをコピーしてくれば、java swingもホスト側の XQuartzに表示されます あるいは
        docker run -d -it --name jdk6linux -e DISPLAY=$DISPLAY --net host -v $HOME/.Xauthority:/root/.Xauthority:rw -v 他のマウント enoniccloud/java6
    • M1 Macで軽くできるのがいいが、Windows実機環境と違いフォントが文字化けしたりする