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

我认为您应该完全避免设置类路径,并且由于您将所有内容都打包在 uber-jar 中 - 它应该可以工作。

于 2012-09-07T12:13:01.777 回答
0

如果您希望它们包含在空格中,则必须明确写出 jar 的名称。否则,我建议只需启动您的 jar 并手动提供类路径作为参数:

java -cp . -jar ServerApplication.jar

浏览此处获取更多信息。

于 2012-09-07T12:13:30.993 回答
0

也许你可以试试fatjar这个优秀的 eclipse 插件。它曾多次使用它来包含基于 Java Swing 的应用程序的所有依赖项。

于 2012-09-07T13:24:00.300 回答