繁体   English   中英

带有组合库的jar文件中的类路径

[英]Class-Path in jar file with combined libraries

我正在尝试创建一个有关其所需库的“自包含” 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内的com.mysql.jdbc包。 为什么是这样? 当我将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: .

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

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

java -cp . -jar ServerApplication.jar

浏览此处获取更多信息。

也许您可以尝试使用出色的eclipse插件fatjar 它已经多次使用它来包含基于Java Swing的应用程序的所有依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM