PHPスクリプトを介して作成されたJNLPファイルがあります。次のようなファイルを出力します。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="/" spec="1.0+">
<information>
<title>sometitle</title>
<vendor>somevendor</vendor>
<homepage href=""/>
<description>somedesc</description>
<description kind="short">someshort</description>
</information>
<update check="always"/>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+"/>
<jar href="http://fproject.localhost/getjava/jar/e43e034c49c4a24f2711d385370faaf1ef92ca76" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/commons-codec-1.6.jar" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/commons-logging-1.1.1.jar" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/fluent-hc-4.2.3.jar" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/httpclient-4.2.3.jar" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/httpclient-cache-4.2.3.jar" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/httpcore-4.2.2.jar" main="true"/>
<jar href="http://fproject.localhost/getjava/libs/lib/httpmime-4.2.3.jar" main="true"/>
</resources>
<application-desc main-class="Windows8.Windows8GUI">
</application-desc>
</jnlp>
アプリケーションはロードされ、最初は正常に開きますが、アプリケーションは遅く、応答しません。私のapacheアクセスログを確認した後、奇妙なことが起こっているようです。まず、すべてのjarが正常にロードされます。
127.0.0.1 - - [22/Feb/2013:19:39:56 +0000] "GET /getjava/libs/lib/fluent-hc-4.2.3.jar HTTP/1.1" 200 24509 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:56 +0000] "GET /getjava/libs/lib/commons-logging-1.1.1.jar HTTP/1.1" 200 65294 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:56 +0000] "GET /getjava/jar/ba1df5097852421a791d095271fd48df6c79804c HTTP/1.1" 200 14060 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:56 +0000] "GET /getjava/libs/lib/commons-codec-1.6.jar HTTP/1.1" 200 253503 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:57 +0000] "GET /getjava/libs/lib/httpclient-4.2.3.jar HTTP/1.1" 200 469073 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:57 +0000] "GET /getjava/libs/lib/httpclient-cache-4.2.3.jar HTTP/1.1" 200 124242 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:57 +0000] "GET /getjava/libs/lib/httpcore-4.2.2.jar HTTP/1.1" 200 245191 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:39:57 +0000] "GET /getjava/libs/lib/httpmime-4.2.3.jar HTTP/1.1" 200 29955 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
次に、同じファイルに対するリクエストが大量にありますが、場所が変更されています。
127.0.0.1 - - [22/Feb/2013:19:40:02 +0000] "GET /getjava/jar/lib/fluent-hc-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:03 +0000] "GET /getjava/jar/lib/httpclient-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:03 +0000] "GET /getjava/jar/lib/httpclient-cache-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:03 +0000] "GET /getjava/jar/lib/httpclient-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:03 +0000] "GET /getjava/jar/lib/httpclient-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:04 +0000] "GET /getjava/jar/lib/fluent-hc-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:04 +0000] "GET /getjava/jar/lib/httpclient-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:05 +0000] "GET /getjava/jar/lib/httpclient-cache-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:05 +0000] "GET /getjava/jar/lib/httpcore-4.2.2.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:05 +0000] "GET /getjava/jar/lib/httpmime-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:06 +0000] "GET /getjava/libs/lib/httpclient-cache-4.2.3.jar HTTP/1.1" 200 124242 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:06 +0000] "GET /getjava/libs/lib/httpcore-4.2.2.jar HTTP/1.1" 200 245191 "-" "JNLP/1.7.0 javaws/10.13.2.20 (<internal>) Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:06 +0000] "GET /getjava/jar/lib/fluent-hc-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:06 +0000] "GET /getjava/jar/lib/httpclient-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:07 +0000] "GET /getjava/jar/lib/httpclient-cache-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:07 +0000] "GET /getjava/jar/lib/httpcore-4.2.2.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:07 +0000] "GET /getjava/jar/lib/httpmime-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:08 +0000] "GET /getjava/jar/lib/fluent-hc-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
127.0.0.1 - - [22/Feb/2013:19:40:08 +0000] "GET /getjava/jar/lib/httpclient-4.2.3.jar HTTP/1.1" 404 2011 "-" "Java/1.7.0_13"
/ getjava / libs/libが/getjava/ jar/libに変更されていることに注意してください
これはどうですか?JVMはどこからこのURLを取得していますか?
さらに、JVMが同じファイルを何度も要求するのはなぜですか?
編集-詳細情報
問題を少し絞り込んだと思います。Netbeansに関係していると確信しています。バージョン7.2.1を使用しています。
META-INF/MANIFEST.MF
追加のライブラリリクエストのURLは、メインアプリケーションのJarのファイルから取得されているようです。そこに私は以下を見ることができます:
Class-Path: lib/commons-codec-1.6.jar lib/commons-logging-1.1.1.jar li
b/fluent-hc-4.2.3.jar lib/httpclient-4.2.3.jar lib/httpclient-cache-4
.2.3.jar lib/httpcore-4.2.2.jar lib/httpmime-4.2.3.jar
これらのファイルはそのURLで利用できないため、これは変更されたURLとそれに続く404応答を説明します。
Netbeansがこのファイルパスを作成している理由がわかりません。Java WebstartがJNLPファイルを使用してリソースをダウンロードし、その中に<resources>
ノードがあるという印象を受けていますか?
Class-Path
これが私の問題の根本であると信じているので、netbeansがこの属性を追加するのを止めるにはどうすればよいですか。
さらなるアップデート
ファイルをハッキングすることで、この問題の回避策を見つけました。この行を削除すると:
<attribute name="Class-Path" value="${jar.classpath}"/>
このファイルから:
nbproject\build-impl.xml
次に、NetbeansはWebstartアプリ用にJarを正しくコンパイルします。Jar内のファイルにClass-Path
属性は作成されません。META-INF/MANIFEST.MF
これを削除した後、アプリは完全に正常に動作し、ハングしたり、存在しないファイルに対する偽の要求が発生したりすることはありません。
さて、問題は、なぜNetbeansがこれを行うのかということだと思います。そして、私がXML構成ファイルをハッキングするのではなく、適切な回避策はありますか?私はJavaを約1週間使用していることを覚えておいてください。私はANT/Javaについて本当に何も知りません。