Index > Inno Setup のセットアップ設定ファイルにJREのファイルを追加(installer,java)
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スクリプト

listupJre.py

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"
....
 Twitter
follow me on Twitter
 Categories