0

必要なライブラリに関して「自己完結型」のjarファイルを作成しようとしています。

したがって、次のantファイルを作成しました。

<project name="srv" default="prod">
    <target name="prod">
        <jar destfile="build/ServerApplication.jar" basedir="bin/">
            <restrict>
             <name name="**/*.class"/>
             <archives>
               <zips>
                 <fileset dir="lib/" includes="**/*.jar"/>
               </zips>
             </archives>
            </restrict>
            <manifest>
                <attribute name="Class-Path" value="." />
                <attribute name="Main-Class" value="my.package.ServerApplication" />
            </manifest>
        </jar>
    </target>
</project>

しかし、使用してアプリケーションを起動しようとすると

> java -jar ServerApplication.jar

エラーが発生する

jdbc:mysql://localhost/db?user=root&password= に適したドライバーが見つかりません

これはcom.mysql.jdbc、jar 内のパッケージが見つからないためだと思います。どうしてこれなの?Class-Pathをに設定すると.、jar はその jar 内のすべてのクラスを見つけることができませんか?

逆コンパイラで jar を開きました。すべてのクラスが必要な場所にあります。ここを参照してください。

逆コンパイルされた JAR

ここで何がうまくいかないのですか?私のマニフェストは次のようになります。

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_07-b10 (Oracle Corporation)
Main-Class: my.package.ServerApplication
Class-Path: .
4

3 に答える 3

0

たぶん、 fatjarである優れたEclipseプラグインを試すことができます。Java Swing ベースのアプリケーションのすべての依存関係を含めるために、これを何度も使用していました。

于 2012-09-07T13:24:00.300 に答える
0

クラスパスの設定はまったく避けるべきだと思います。すべてをuber-jarにパッケージ化しているので、うまくいくはずです。

于 2012-09-07T12:13:01.777 に答える
0

jar をスペースで区切って含める場合は、jar の名前を明示的に記述する必要があります。それ以外の場合は、単純に jar を起動し、手動でクラス パスをパラメーターとして指定することをお勧めします。

java -cp . -jar ServerApplication.jar

詳しくはこちらをご覧ください。

于 2012-09-07T12:13:30.993 に答える