Tue, July 24, 2007
Inno Setup のセットアップ設定ファイルにJREのファイルを追加(installer,java)
InnoSetupを使えば、Javaで記述したJavaVMを必要とする プログラム一式をJavaVM込みで配布することができる。 ファイルサイズさえ気にしなければ、 Javaで記述されたプログラムであることを意識させないで配布することが できます。
InnoSetup
では、foo.iss ファイルの[Files]セクションに
インストールするファイルを指定するのだが、
指定のディレクトリ以下全部を追加、といった記述はできないようです。
(知らないだけ?)
[Files]セクションに単純にインストール対象ファイルを列挙すれば いいので、話は簡単なのだが、JREを丸ごと含めるような 長い記述となると、手作業では無理。
そこで以下のようなJRE以下のファイルを列挙して、 InnoSetupの iss ファイルの[Files]セクション記述形式で、 出力する jython スクリプトを用意して使っています。
JRE以下のファイルを全部列挙するjythonスクリプト
import java.lang as lang
import java.io as io
import java.util as util
false=0
true=1
rootDir=io.File("c:\\jdk1.6.0\\jre")
LEN=lang.String(rootDir.toString()).length()
def isAccept(fname):
if fname=="sunjce_provider.jar":
return false
if fname=="ldapsec.jar":
return false
if fname=="dnsns.jar":
return false
return true
def dumpFiles(dir):
list=dir.listFiles()
for f in list:
if f.isFile():
if isAccept(f.name):
destDir=lang.String(f.getParentFile().toString()).substring( LEN )
print "source: \""+f.toString()+"\"; DestDir: \"{app}\\jre"+destDir+"\""
def parseDirs(dirList,dir):
#dirlist=util.ArrayList()
list=dir.listFiles()
for f in list:
if f.isDirectory():
dirList.add(f)
parseDirs(dirList,f)
dirList=util.ArrayList()
dirList.add(rootDir)
parseDirs(dirList,rootDir)
for dir in dirList:
dumpFiles(dir)
以下の記述部分で、直接JREのインストールされている場所を
指定しています。
(ですから、自分の環境に合わせて書き換える必要があります。)
rootDir=io.File("c:{br:linebreak}jdk1.6.0
jre")
実行すると、以下のような出力が得られるので、 foo.iss の[Files]セクションにコピーペします。
source: "c:\jdk1.6.0\jre\LICENSE"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_de.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_es.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_fr.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_it.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_ja.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_ko.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_sv.rtf"; DestDir: "{app}\jre"
source: "c:\jdk1.6.0\jre\LICENSE_zh_CN.rtf"; DestDir: "{app}\jre"
....