期限が切れて起動できなくなったjnlpをJava Web Startを使わずに起動する

どんどんJavaのセキュリティが厳しくなってますね。
Ora*leからJavaは辞めようって言われてるような気がしてきました。

証明書の期限が切れそうになっていたため電子証明書を発行してもらったところ、WinPCでしか認識できないUSBが送られてきました。
でも手元にWinPCはない。
テスト環境はあるけど、署名ができないからjnlpから起動できない。

ということで、Java Web Startを使わずにアプリを立ち上げようと思います。
注意:あくまでテスト用です。推奨はしません。

結論

こんな感じのjnlpファイルがあるとします。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://127.0.0.1/application/">
  <information>
    <title>test_project</title>
    <vendor>Kai Shoya</vendor>
    <description/>
  </information>
  <resources>
    <jar href="main.jar"/>
    <jar href="library.jar"/>
    <j2se version="1.7+" initial-heap-size="512m" max-heap-size="1024m"/>
  </resources>
  <application-desc main-class="com.example.test.Main"/>
  <security>
    <all-permissions/>
  </security>
</jnlp>

それをこうします。(語彙力。。。

#!/bin/bash
URL="http://127.0.0.1/application"
SCRIPT_PATH="$(cd $(dirname $0); pwd)"
LIB_PATH="$SCRIPT_PATH/lib"

mkdir -p $LIB_PATH
cd $LIB_PATH

curl -O "$URL/main.jar"
curl -O "$URL/library.jar"

java -cp "$LIB_PATH/*" com.example.test.Main

ポイントは3つです。

  1. <jnlp codebase="http:/127.0.0.1/application"><jar href="main.jar"/>を組み合わせてcurlで取ってくる

  2. java -cpでダウンロードしたファイルのパスを通す
    -cpと-jarを組み合わせるとパスがうまく通りません

  3. <application-desc main-class="com.example.test.Main"/>がメインクラス名

jnlpをこう書き換えてもセキュリティエラーになるのでお気をつけ下さい。
これ解決するまでに何時間もかかってしまった。。。

<jnlp codebase="./lib/">
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.