Akira's Tech Notes

Java/JVM | GNU/Linux | Emacs/Lisp | 知的好奇心駆動

header-icon
ネイティブでない日本語で思い付くことや気になることをダラダラ書く、体裁とかは気にしない。読みづらいと感じた時に随時更新する。

[メモ]JDeveloper 11g/12c 開発環境の整備

Archlinux環境にJDeveloper 11g/12c 複数バージョンインストール時のメモ。

1 環境

  • OS: ArchLinux (Linux jizai 3.15.5-2-ARCH #1 SMP PREEMPT Fri Jul 11 07:56:02 CEST 2014 x86_64 GNU/Linux)
  • DE: Gnome 3.12.2
  • JDeveloper 11g Release 1 (11.1.1.3.0)
  • JDeveloper 11g Release 1 (11.1.1.7.0)
  • JDeveloper 11g Release 2 (11.1.2.4.0)
  • JDeveloper 12c Release 1 (12.1.3.0.0)

2 12cインストール時のtmp領域足りない問題

JDeveloper 12cの Linux-Specific Installer でインストール時に以下のエラーが起きた。 /tmp 領域が足りないですね。必要な分は 2G のようです。メモリに余裕があれば /tmp 領域を拡大すれば問題解決です。

tmp足りないエラー

$ ./jdev_suite_121300_linux64.bin
0%....................................................................................................100%
Not enough disk space in dir /tmp/sfx_6TUHbe, requires at least 2015 MB disk space
Error during execution, error code = -1.

/tmp 領域のサイズを拡大する。

$ sudo mount -o remount,size=2560m /tmp
$ ./jdev_suite_121300_linux64.bin
0%....................................................................................................100%
ランチャのログ・ファイルは/tmp/OraInstall2014-07-23_01-41-50PM/launcher2014-07-23_01-41-50PM.logです。
Oracle Universal Installerを起動中です

CPU速度が300MHzを超えていることを確認してください.   実際1794.296MHz    問題なし
モニターの確認中: 少なくとも256色表示するよう設定されている必要があります.   実際 16777216    問題なし
スワップ領域の確認中: 512MBを超えている必要があります.   実際5238780MB    問題なし
このプラットフォームに64-bit JVMが必要かどうかを確認中.   実際 64    問題なし(64-bitは不要)
一時領域の確認中: 300MBを超えている必要があります.   実際79664MB    問題なし

/tmp を拡大するのが難しい場合、 Generic Installer on Linux jar形式の インストーラーを使って -Djava.io.tmpdir=$HOME/tmp JAVAオプションにて一時領域 を変えるようする方法もあります。

tmp領域のパス変数 TMP TEMP TMP_DIR などを一時変える方法もありますが、実際に検証 してみたところ何れも失敗しました。

3 12c起動時にプロセスクラッシュ問題

12c起動時にプロセスクラッシュします。

$ jdeveloper/jdev/bin/jdev

 Oracle JDeveloper 12c 12.1.3.0.0
 Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.

Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on  -Dswing.aatext=true
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f7f30797960, pid=20635, tid=140185120179968
#
# JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  0x00007f7f30797960
#
# Core dump written. Default location: /home/akira/Oracle/Jdev12.1.3.0.0/jdeveloper/jdev/bin/core or core.20635
#
# An error report file with more information is saved as:
# /home/akira/Oracle/Jdev12.1.3.0.0/jdeveloper/jdev/bin/hs_err_pid20635.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#
/home/akira/Oracle/Jdev12.1.3.0.0/jdeveloper/jdev/bin/../../ide/bin/launcher.sh: 1207 行: 20635 中止                  (コアダンプ) ${JAVA} "${APP_VM_OPTS[@]}" ${APP_ENV_VARS} -classpath ${APP_CLASSPATH} ${APP_MAIN_CLASS} "${APP_APP_OPTS[@]}"
Error: JDeveloper can't recognize the JDK version
$

GNOME_DESKTOP_SESSION_ID 環境変数が原因でしたので、Jdev起動シェールに GNOME_DESKTOP_SESSION_ID 環境変数をクリアするようにした。

環境変数を確認する

$ env |grep GNOME 
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
XDG_CURRENT_DESKTOP=GNOME

Jdev12.1.3.0.0/jdeveloper/jdev/bin/jdev を編集する

#!/bin/bash

unset GNOME_DESKTOP_SESSION_ID

#=============================================================================
#  Launcher for Oracle JDeveloper 11g Release 2 (11.1.2.4.0)
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 
#=============================================================================
...........
★省略★

4 32bit版起動時のUnsatisfiedLinkError

Archlinux上で JDeveloper 11g インストール直後起動時に以下のようなエラーが起きて起動 ができない状態でした。後から分かったのですが、12cでエラーが起きない理由は64bit版であ るためでした。

$ jdeveloper/jdev/bin/jdev

Oracle JDeveloper 11g Release 1 (11.1.1.3.0)
 Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.

java.lang.UnsatisfiedLinkError: /home/akira/Oracle/Jdev11.1.1.3.0/jdk160_18/jre/lib/i386/xawt/libmawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1699)
	at java.lang.Runtime.load0(Runtime.java:770)
	at java.lang.System.load(System.java:1003)
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1720)
	at java.lang.Runtime.loadLibrary0(Runtime.java:823)
	at java.lang.System.loadLibrary(System.java:1028)
	at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.awt.NativeLibLoader.loadLibraries(NativeLibLoader.java:38)
	at sun.awt.DebugHelper.<clinit>(DebugHelper.java:29)
	at java.awt.Component.<clinit>(Component.java:560)
	at oracle.ide.IdeCore.startupImpl(IdeCore.java:1156)
	at oracle.ide.Ide.startup(Ide.java:703)
	at oracle.ideimpl.DefaultIdeStarter.startIde(DefaultIdeStarter.java:35)
	at oracle.ideimpl.Main.start(Main.java:184)
	at oracle.ideimpl.Main.main(Main.java:146)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at oracle.ide.boot.PCLMain.callMain(PCLMain.java:62)
	at oracle.ide.boot.PCLMain.main(PCLMain.java:54)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at oracle.classloader.util.MainClass.invoke(MainClass.java:128)
	at oracle.ide.boot.IdeLauncher.bootClassLoadersAndMain(IdeLauncher.java:189)
	at oracle.ide.boot.IdeLauncher.launchImpl(IdeLauncher.java:89)
	at oracle.ide.boot.IdeLauncher.launch(IdeLauncher.java:65)
	at oracle.ide.boot.IdeLauncher.main(IdeLauncher.java:54)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at oracle.ide.boot.Launcher.invokeMain(Launcher.java:713)
	at oracle.ide.boot.Launcher.launchImpl(Launcher.java:115)
	at oracle.ide.boot.Launcher.launch(Launcher.java:68)
	at oracle.ide.boot.Launcher.main(Launcher.java:57)

awt から利用している libXtst.so.6 シェアードライブラリが見つからないようなので 、 locate で確認したら libxtst パッケージがちゃんと入っている。32bit/64bitの問題だ ろうなと思って、Archlinuxのパッケージリポジトリを検索したらやはり lib32-libxtst が 存在した、これをインストールしたらエラーが解消されました。

libXtst.so.6 ライブラリの確認

$ locate libXtst.so
/usr/lib/libXtst.so
/usr/lib/libXtst.so.6
/usr/lib/libXtst.so.6.1.0
$ pacman -Qo /usr/lib/libXtst.so.6
/usr/lib/libXtst.so.6 は libxtst 1.2.2-1 によって保有されています

lib32-libxtst をインストールする

★インストール
$ sudo pacman -S lib32-libxtst
[sudo] password for akira: 
依存関係を解決しています...
相互衝突をチェックしています...

パッケージ (1): lib32-libxtst-1.2.2-1

Total Download Size:    0.01 MiB
Total Installed Size:   0.02 MiB

:: インストールを行いますか? [Y/n] 
:: パッケージを取得します ...
 lib32-libxtst-1.2.2-1-x86_64                                                                         9.0 KiB  44.4K/s 00:00 [############################################################################] 100%
(1/1) キーリングのキーを確認                                                                                                 [############################################################################] 100%
(1/1) パッケージの整合性をチェック                                                                                           [############################################################################] 100%
(1/1) パッケージファイルのロード                                                                                             [############################################################################] 100%
(1/1) ファイルの衝突をチェック                                                                                               [############################################################################] 100%
(1/1) 空き容量を確認                                                                                                         [############################################################################] 100%
(1/1) インストール lib32-libxtst                                                                                             [############################################################################] 100%

★確認
$ pacman -Ql lib32-libxtst
lib32-libxtst /usr/
lib32-libxtst /usr/lib32/
lib32-libxtst /usr/lib32/libXtst.so
lib32-libxtst /usr/lib32/libXtst.so.6
lib32-libxtst /usr/lib32/libXtst.so.6.1.0
lib32-libxtst /usr/lib32/pkgconfig/
lib32-libxtst /usr/lib32/pkgconfig/xtst.pc
lib32-libxtst /usr/share/
lib32-libxtst /usr/share/licenses/
lib32-libxtst /usr/share/licenses/lib32-libxtst
$

5 文字化け

11g 起動したら日本語が例の豆腐形状となっていました。JdevにバンドされたJDKの Jdev11.1.1.3.0/jdk160_18/jre/lib/fonts の配下に fallback ディレクトリを作成し、日 本語フォントへのシンボルリンクを貼っておく。また、起動オプションにフォントのアンチエ イリアス (anti-aliasing)を有効にしておくとよいでしょう。

起動時の豆腐状

2014-07-22-jdeveloper-1.png

fallbackフォントの設定を実施する

★fallbackフォントの指定
$ cd ~/Oracle/Jdev11.1.1.3.0/jdk160_18/jre/lib/fonts
$ mkdir fallback; cd fallback
$ ln -s /usr/share/fonts/TTF/VL-Gothic-Regular.ttf VL-Gothic-Regular.ttf
$ ln -s /usr/share/fonts/TTF/VL-PGothic-Regular.ttf VL-PGothic-Regular.ttf

★起動オプション設定
$ export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true"
$ cd ~/Oracle/Jdev11.1.1.3.0/
$ jdeveloper/jdev/bin/jdev

Oracle JDeveloper 11g Release 1 (11.1.1.3.0)
 Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.

Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true

_JAVA_OPTIONS をいちいち指定するのは非効率であれば、適当に /etc/profile.d/jdk.sh~/.bash_profile にて定義しておけばよいでしょう。

2014-07-22-jdeveloper-2.png

もう一度起動してみたら、ばっちりだね。

6 メニューバーの動作不具合

この問題は 11.1.1.3.0 だけ起きるようです。

JDeveloper起動後、ウィンドウを最大化した状態でメニューバーの操作がうまくできない問題 がある。詳細な原因がよくわからない、GTKウィンドウマネージャとうまく連携出来ていない気 がする。とりあえず、ウィンドウを最大化せずに問題から逃げた。

7 ランチャーから起動できるようにする

ランチャー起動できるように ~/.local/share/applications/jdev.desktop ファイルを作成 しておく。

[Desktop Entry]
Name=JDeveloper
Exec=/home/akira/Oracle/Jdev11.1.1.3.0/jdeveloper/jdev/bin/jdev
Icon=/home/akira/Oracle/Jdev11.1.1.3.0/jdeveloper/jdev/bin/coffee.png
StartupNotify=true
Terminal=false
Type=Application
Categories=Development;Java;

8 未解決問題

  • フォントが醜い
  • GTKLookAndFeelが使えない

Comments