我使用以下ANT脚本创建了一个jar文件
<manifestclasspath property="jar.classpath" jarfile="${bin.dir}/${jar.app.name}" maxparentlevels="0">
<classpath refid="main.class.path" />
</manifestclasspath>
<target name="jar">
<mkdir dir="${build.dir}/lib/isp"/>
<mkdir dir="${build.dir}/lib/jasper"/>
<copy todir="${build.dir}/lib/jasper">
<fileset dir="${lib.jasper.dir}">
<include name="**/*.jar" />
</fileset>
</copy>
<copy todir="${build.dir}/lib/isp">
<fileset dir="${lib.isp.dir}">
<include name="**/*.jar" />
</fileset>
</copy>
<jar jarfile="${bin.dir}/${jar.app.name}"
index="true"
basedir="${classes.dir}" excludes="lib/mytest.jar "
>
<manifest>
<attribute name="Main-Class" value="${main.class}" />
<attribute name="Class-Path" value="${jar.classpath}" />
</manifest>
</jar>
</target>
生成的jar文件具有以下MANIFEST.MF条目。
Main-Class: dm.jb.Main
Class-Path: lib/isp/OfficeLnFs_2.2.jar lib/isp/RXTXcomm.jar lib/isp/ba
rbecue-1.0.6d.jar lib/isp/commons-logging-1.1.jar lib/isp/forms-1.0.5
.jar lib/isp/gnujaxp.jar lib/isp/helpUI.jar lib/isp/inspInstaller.jar
lib/isp/itext-2.0.1.jar lib/isp/itext-2.0.2.jar lib/isp/jcalendar-1.
3.2.jar lib/isp/jcl.jar lib/isp/jcommon-1.0.10.jar lib/isp/jcommon-1.
0.9.jar lib/isp/jdnc-0_7-all.jar lib/isp/jdnc-runner.jar lib/isp/jdom
.jar lib/isp/jfreechart-1.0.6.jar lib/isp/jlfgr-1_0.jar lib/isp/junit
.jar lib/isp/log4j-1.2.9.jar lib/isp/looks-1.3.2.jar lib/isp/msbase.j
ar lib/isp/mssqlserver.jar lib/isp/msutil.jar lib/isp/mysql-connector
当我尝试运行命令时
java -jar mytest.jar
,它失败并抛出错误,说dm.jb.Main未找到。但我可以通过指定类路径java -classpath dm.jb.Main
请帮帮我 DM
答案 0 :(得分:1)
如果你像这样运行你的罐子
java -jar <your jar name>
然后java将忽略您提供的所有类路径参数,并尝试使用清单中的给定类路径查找它的资源。但这些路径指向您的本地文件系统而不是jar内部。所以你必须在一个目录中启动jar,你可以在lib / isp /...
找到你的lib