[英]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,所有类都在它们需要的地方,请参见此处:
这是怎么了? 我的清单看起来像这样:
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.