Java 从ant创建的Jar无法找到外部Jar
我通过ant创建了一个可执行的jar文件,它还引用了外部jar文件Java 从ant创建的Jar无法找到外部Jar,java,ant,jar,Java,Ant,Jar,我通过ant创建了一个可执行的jar文件,它还引用了外部jar文件mysql connector.jar。 当我执行java-jar*.jar时,它会执行,但会对所有与SQL相关的语句给出ClassNotFoundException。我已遵循中给出的步骤 如果我执行antcompile&antrun,则数据库将成功创建。 如何通过jar文件运行它 build.xml <project name="OMSInstaller" basedir="." > <propert
mysql connector.jar
。
当我执行java-jar*.jar时,它会执行,但会对所有与SQL相关的语句给出ClassNotFoundException
。我已遵循中给出的步骤
如果我执行antcompile
&antrun
,则数据库将成功创建。
如何通过jar文件运行它
build.xml
<project name="OMSInstaller" basedir="." >
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="lib.dir" value="lib"/>
<property name="main-class" value="Installer.OMSinstaller"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java fork="true" classname="${main-class}">
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
</java>
</target>
</project>
lib文件夹:
mysql连接器java-*.jar
jtds-*.jar发现了我的一个旧ant文件,我在其中自动构建了类路径字符串,并将其添加到生成的类文件的清单中
<target name="BuildJar">
<property name="liblocation" location="${libdir}" />
<pathconvert property="jarclasspathstring" pathsep=" ">
<path>
<fileset dir="${liblocation}">
<include name="*.jar" />
</fileset>
</path>
<map from="${liblocation}" to="." />
</pathconvert>
<jar destfile="${builddir}/${jarname}" basedir="${bindir}" update="true" level="9" index="false" filesOnly="true">
<manifest>
<attribute name="Main-Class" value="${mainclass}" />
<attribute name="Class-Path" value="${jarclasspathstring}" />
</manifest>
</jar>
</target>
libdir是一个属性,用于指定一个目录,其中包含所有引用的库
PS:index=false对于从内存引用其他jar文件很重要,当您执行jars(java-jar)时,java将忽略传递给它的类路径属性,而使用jars类路径清单属性。您应该将主jar所依赖的任何依赖项添加到jar中。由于我已经从ant的构建文件中创建了一个jar,所以是否需要在build.xml中将清单文件作为参数传递,以便将其包含在jar中。如果没有,那么我应该如何将清单文件指定给已经创建的jar?您可以基于一个充满jar的目录动态构建类路径,并将其添加到生成的清单中。请参阅ant文档,了解如何执行此操作。我在一个旧的ant文件中执行了类似的操作。我必须添加一个答案,因为它对于注释来说太长。感谢共享构建文件。我设法创建了jar文件。但现在当我运行它时,它在*.jar中显示
无主属性。我提取了jar并检查了META-INF文件夹中的清单文件。它确实有条目Main Class:Installer.ominstaller类路径:ominstaller-*.jar
主类和类路径真的在一行吗?它们应该是单独的,而且类路径条目不能包含通配符!必须明确列出所有文件。如果您是用我的代码生成的,并且条目中仍然有一个通配符,这可能是因为没有可引用的jar文件,即ant没有查看正确的文件夹?不,主类和类路径在单独的行上。类路径中也没有通配符,。是的,我把罐子放错地方了。现在问题解决了。谢谢