Skip to content
2011/03/17 / highmt

javaのプロパティファイルを比較するWinMergeプラグイン

svnでどういう変更が入ったのか追いかけるのに不便だったのでつくってみた。
どこかにありそうなものだけど…

 
準備:

  1. JDKをインストールする
  2. 環境変数 JAVA_HOME をJDKのインストールディレクトリに設定(オプショナル)

 
設定:

  1. 以下を jprop.sct という名前で保存する:
    
    <scriptlet>
        <implements type="Automation" id="dispatcher">
            <property name="PluginEvent"><get/></property>
            <property name="PluginDescription"><get/></property>
            <property name="PluginFileFilters"><get/></property>
            <property name="PluginIsAutomatic"><get/></property>
            <method   name="UnpackFile"/>
            <method   name="PackFile"/>
        </implements>
        <script language="VBS">
    
    Option Explicit
    
    Const defaultJavaHome = "C:\jdk" '←ここは自分の環境にに応じて変更
    
    Function get_PluginEvent()
        get_PluginEvent = "FILE_PACK_UNPACK"
    End Function
    
    Function get_PluginDescription()
        get_PluginDescription = "Convert Java Propertis Files"
    End Function
    
    Function get_PluginFileFilters()
        get_PluginFileFilters = "\.properties$"
    End Function
    
    Function get_PluginIsAutomatic()
        get_PluginIsAutomatic = True
    End Function
    
    Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
        Dim WshShell
        Dim javaHome
        Dim objExec
    
        Set WshShell = CreateObject("WScript.Shell")
        javaHome = WshShell.Environment("Process")("JAVA_HOME")
        If javaHome = "" Then
            javaHome = defaultJavaHome
        End If
        Set objExec = WshShell.Exec(javaHome + "\bin\native2ascii -reverse """ + fileSrc + """ """ + fileDst + """" )
        Do While objExec.Status = 0
            'WScript.Sleep(100)
        Loop
    
        pbChanged = True
        pSubcode = 0
    
        UnpackFile = True
    End Function
    
    Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
        Dim WshShell
        Dim javaHome
        Dim objExec
    
        Set WshShell = CreateObject("WScript.Shell")
        javaHome = WshShell.Environment("Process")("JAVA_HOME")
        If javaHome = "" Then
            javaHome = defaultJavaHome
        End If
        Set objExec = WshShell.Exec(javaHome + "\bin\native2ascii """ + fileSrc + """ """ + fileDst + """" )
        Do While objExec.Status = 0
            'WScript.Sleep(100)
        Loop
    
        pbChanged = True
        pSubcode = 0
    
        PackFile = True
    End Function
    
        </script>
    </scriptlet>
    
    
  2. jprop.sctを WinMerge をインストールしたディレクトリの下の
    MergePlugins ディレクトリに置く

 

使い方:

  1. WinMergeで比較する
  2. [プラグイン]-[展開プラグインで開く]を選び、
    [展開プラグインの選択]ダイアログの[ファイル展開プラグイン]で
    jprop.sctを選ぶ

 

WScriptオブジェクトにアクセスできないので
ポーリング中Sleepしてないのが難点ですが、
最近のマルチコアなPCならさほど影響はないでしょうきっと…
もしくは、ExecじゃなくてRunとか使えばいいのかもしれませんが…

広告
%d人のブロガーが「いいね」をつけました。