Java8とJava7の環境を共存させる

開発の関係でJava7を残しておく必要があったので,作業メモ
参考にしたのは,こちらのサイト
WindowsでJDK 7とJDK 8を切り替える際の注意点

JDKのインストール

こちらからJDKをインストールした.

普通にインストール.パブリックJREもインストール.

システム環境変数の修正

  1. JAVA_HOMEの追加

Java 7を使いたかったので,「C:\Program Files\Java\jdk1.7.0_79」

  1. PATHに%JAVA_HOME\binを追加

%JAVA_HOME\binは問答無用に先頭へいれました.javapathフォルダーよりも先に書かれていればOKだと思います

java.exeなどを削除

system32もしくはSysWOW64フォルダにあるjava.exe, javaw.exe, javaws.exeを削除します.
エクスプローラwindowsフォルダから「java.exe」を検索すると上の3つのファイルが出てくるのでそのまま削除する

レジストリの修正

regeditで,
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\CurrentVersionの値を「1.8」から「1.7」に変更

レジストリの修正をしないと次のようなエラーが出てしまったので,レジストリを変更しました

>java --version
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

MacとWindowsの両方でMakefileをビルドする設定方法

前回はMinGWだけの場合の設定方法だったのですが,設定ファイルをMac/Winで共有したので少しファイル(Make.sublime-build)を変更しました。

{
	"cmd": ["make"],
	"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
	"working_dir": "${project_path:${folder:${file_path}}}",
	"selector": "source.makefile",
	"shell": false,
	"encoding": "cp932",

	"windows":
	{
		"path": "C:\\MinGW\\bin;C:\\MinGW\\msys\\1.0\\bin\\"
	},
	"osx":
	{
		"path": "/opt/local/bin:/opt/local/sbin:/usr/local/gnu/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"	
	},

	"variants":
	[
		{
			"name": "Run",
			"cmd": ["make", "clean"]
		}
	]
}

あと,variantsのnameを”Run"にしておくとShift+⌘+Bでコマンドをデフォルトで実行してくれるようです。それ以外のnameを設定した場合は⌘+Pから呼び出します。

MacとWindowsで使い始めるための導入まとめ

MacWindowsSublime Textを使い始めて,設定周りとか一緒にさせておきたいので,まとめました。

以下の情報は古いので,本家のページhttps://packagecontrol.io/docs/syncing:Syncingを参照して下さい。

使う(った)もの

検索するとDropBoxでやられている方が多かったので,Copyで始めてみました。CopyならDropBoxと違って15GB(紹介なら+5GB)からスタートできるのがいいかなと思ってます。
Copyのアカウントを持ってない方はこちらからどうぞ。

Sublime TextとCopyのインストール

普通にそれぞれのマシンにSublime TextとCopyをインストールします。
Copyはアカウントを作成します。デフォルトでは~/(ユーザ名)/Copyにフォルダが作成されます。

Sublime Textを起動する

Windowsの場合はC:\Users\(ユーザ名)\AppData\RoamingにSublime Text 2というフォルダが作成されます。
Macの場合は/Users/(ユーザ名)/library/Application SupportにSublime Text 2というフォルダになります。
確認できたら,Sublime Textを終了します。

Copyフォルダにファイルを移動

Copyフォルダに「Sublime Text 2」フォルダを作成し,その下にWindows / Macどちらから始めてもよい(と思いますが),Windowsにある上記のSublime Text 2フォルダのうち以下のフォルダをCopyに作成したSublime Text 2フォルダの下に移動します。

  • Installed Packages
  • Packages
  • Pristine Packages

シンボリックリンクを作成する

今度はCopy\Sublime Text 2以下にあるフォルダをアプリケーションデータへシンボリックリンクを張ります。
Windowsだとこんな感じ(コマンドプロンプトを管理者権限で起動させる)

> mklink /D "C:\Users\(ユーザ名)\AppData\Roaming\Sublime Text 2\Installed Packages" "C:\Users\(ユーザ名)\Copy\Sublime Text 2\Installed Packages"
> mklink /D "C:\Users\(ユーザ名)\AppData\Roaming\Sublime Text 2\Packages" "C:\Users\(ユーザ名)\Copy\Sublime Text 2\Packages"
> mklink /D "C:\Users\(ユーザ名)\AppData\Roaming\Sublime Text 2\Pristine Packages" "C:\Users\(ユーザ名)\Copy\Sublime Text 2\Pristine Packages"

Macだとこんな感じ

$ cd "~/Library/Application\ Support/Sublime\ Text\ 2/"
$ "ln -s ~/Copy/Sublime\ Text\ 2/Installed\ Packages ./Installed\ Packages"
$ "ln -s ~/Copy/Sublime\ Text\ 2/Packages ./Packages"
$ "ln -s ~/Copy/Sublime\ Text\ 2/Pristine\ Packages ./Pristine\ Packages"

パッケージをインストール

Sublime TextのパッケージをMac/Win共通で使えるのがありがたいです。
私はこの順番でインストールを行いました。

  1. Package Control :  何はなくてもこれを入れないと。
  2. ConvertToUTF8 : UTF-8以外のファイルを扱うのがほとんどなので重宝しています。
  3. IMESupport : Windows版でIMEインライン入力をするのに使います。

あとはお好みで。

環境変数はPreferences.sublime-settingsへ

環境変数をPreferences.sublime-settingsで変更しておくと,すべての*.sublime-builsのpathに入れる必要はなさそう。

Preference > Settings - User で Preferences.sublime-settings - Userが開かれるので,以下を追加しました。

    "build_env":
     {
      "PATH": "/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
     }

この場合はMacPortsを入れている環境なので,/opt/localにports関連のバイナリがあるためです。
コンソールから set | grep PATHとかで,実際の環境変数を入れてください。

WindowsのMinGW環境でmakeする場合の設定

Make.sublime-buildを以下のようにしました。

{
	"cmd": ["make"],
	"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
	"working_dir": "${project_path:${folder:${file_path}}}",
	"selector": "source.makefile",
	"shell": false,
	"path": "C:\\MinGW\\bin;C:\\MinGW\\msys\\1.0\\bin\\",
	"encoding": "cp932",

	"variants":
	[
		{
			"name": "Clean",
			"cmd": ["make", "clean"]
		}
	]
}

あとはMakeを行うディレクトリをプロジェクトとしてフォルダに入れるとそこにMakefileがあるとして実行します。
これでMinGWCygwinを行ったり来たりすることが無くなってスッキリ。

[追記:2013/11/27]
Mac/Winで設定ファイルを共有した場合のエントリを書きました

PDF出力するならAH PDF5プラグインを使うことから始めないとダメだと思う

以前にpdf5プラグインの導入にミスって半分グチなエントリーを書いたのですが,
久々にトライしたところPDFの出力が見違えるようになったので再エントリー。

使ったもの

Apatch FOPでもできると思うけどまだ試していません。

インストール方法

AH pdf5 pluginの中にpdf5_manual.pdfというユーザガイドが書いてあるのでそれを参照に。
簡単な手順だけを記載します。

  • DITA-OTを展開

DITA-OTはフルパッケージを使うとSAXONなどのライブラリも全て入っているのでコレがお手軽。
展開する場所はどこでも良いけど,ディレクトリが深くないほうが良いと思う。

  • DITA-OTの動作確認

一応DITA-OTでPDFが出力されるか確認する。
[DITA-DIR]\doc\userguide.pdfにユーザガイドがある。

ant -f build_demo.xml

でtransformation typeのところでpdfにするとPDF出力できる。

  • AH pdf5 pluginを展開

展開した後で必要なファイルをDITA-OTのフォルダへコピーするのでテンポラリな場所で展開すればよい。

  1. com.antennahouse.pdf5フォルダを[DITA-OT]\pluginsフォルダへコピーする
  2. index-dataフォルダを[DITA-OT]\samplesフォルダへコピーする
  3. run_en.bat,run_ja.bat,ahf_setting.xmlファイルを[DITA-OT}フォルダへコピーする
  4. AH Formatterを使用する場合は,startcmd.batファイルに以下を追加する
REM AH Formatter home and setting file
set AHF_DIR=C:\Program Files (x86)\Antenna House\AHFormatterV6
set AHF_OPT=%DITA_DIR%ahf_setting.xml
start "DITA-OT" cmd.exe

最後に以下のコマンドを

ant -f integrator.xml
Chapter

PDF5プラグインのテスト

startcmd.batを起動させてから,run_en.batかrun_ja.batを実行するとDITA-OTのdefaultとは違う世界が出力されました。

ruby1.9.1でTTSP(1.1.1)を実行しようとすると,invalid multibyte char (US-ASCII)になる場合の対処法

CygwinをアップデートしたらTTSP(1.1.1)が動かなくなった*1

----------------------------------------------------------------------
Execute TTG in auto_code_1
----------------------------------------------------------------------
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/CommonModule.rb:2049: invalid multibyte char (US-ASCII) (SyntaxError)
/home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/CommonModule.rb:2049: invalid multibyte char (US-ASCII)
/home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/CommonModule.rb:2049: syntax error, unexpected $end, expecting keyword_end
  TTJ_ATTR_EMPTY  = "▒ʤ▒"
                       ^
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/common/bin/Config.rb:42:in `<top (required)>'
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/mtakada/hrp2/2.0.0/ttsp/tools/ttg/bin/ttg.rb:46:in `<main>'
TTG failed in auto_code_1

ぐぐると,どうやらruby1.9.1では日本語の対処が変わったようです。
invalid multibyte char (US-ASCII)とか出てきた
Ruby 1.9上のRailsでinvalid multibyte char (US-ASCII)の対処
なので,こちらも該当箇所のファイルの先頭に追加します。

#!ruby
# -*- coding: euc-jp -*- 
#
#  TTG

今のところ次のファイル修正しました。

ttsp/tools/ttg/bin/builder/HTMLBuilder.rb
ttsp/tools/ttg/common/bin/CommonModule.rb
ttsp/tools/ttg/ttj/bin/class/TTJModule.rb
ttsp/tools/ttg/ttj/bin/test_scenario/Condition.rb
ttg/ttj/bin/dictionary.rb

そろそろファイルの文字コードeucじゃなくてUTF-8に移行したほうがいいんじゃないですかね。

追記:TTSP1.1.2では以下のように対応しているようです。

#!ruby -Ke
#
#  TTG
...

って調べると,引っかかっていたKCODEの対応になっているようです。
なので,上記修正したファイルをTTSP1.1.2で修正したようにさらに変更しました。

#!ruby -Ke
# -*- coding: euc-jp -*- 
#
#  TTG

修正したファイル

ttsp/tools/ttg/ttj/bin/class/TTJModule.rb
ttsp/tools/ttg/ttj/bin/ttj.rb

最後にYAMLファイルのロード箇所を修正します。

ttsp/ttg/ttc/bin/class/TTCCommon.rbにkconvを追加します。

require "kconv"
require "yaml"
require "common/bin/CommonModule.rb"
require "ttc/bin/class/TTCError.rb"
require "ttc/bin/class/ObjectCommon.rb"
require "ttc/bin/kwalify.rb"
require "common/bin/Config.rb"

#=====================================================================
# TTCModule
#=====================================================================
module TTCModule
  include CommonModule

  #===================================================================
  # 概 要: YAMLファイルをロードする
  #===================================================================
  def load_yaml_file(sFileName)
    check_class(String, sFileName)  # ファイル名

    cConf = Config.new()
    begin
      if (cConf.use_yaml_library?())
        yaml = YAML.load(File.read(sFileName).toutf8)
      else
        yaml = Kwalify::Yaml.load_file(sFileName)
       end
    rescue SystemCallError
      raise(TTCError.new(sprintf(ERR_CANNOT_OPEN_FILE, sFileName) + "#{TTG_NL}(#{$!.message()})"))
    rescue ArgumentError
      raise(TTCError.new(sprintf(ERR_YAML_SYNTAX_INVALID, sFileName) + "#{TTG_NL}(#{$!.message()})"))
    rescue Kwalify::SyntaxError
      raise(TTCError.new(sprintf(ERR_YAML_SYNTAX_INVALID, sFileName) + "#{TTG_NL}(#{$!.message()})"))
    end

*1:1.1.2では対応しているはず