java ant 运行 命令 - 找不到 lib jar
java ant run command - can not find lib jars
我的 ant 构建文件如下所示:
<project name="Algorithm" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="main-class" value="ye.tian.Main"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="lib.dir" value="lib"/>
<path id="myclasspath">
<fileset dir="${lib.dir}" includes="*.jar"/>
</path>
<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="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="myclasspath"/>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" classpathref="myclasspath" fork="true"/>
</target>
我的项目结构是:根文件夹,里面有两个名为 src 和 lib 的文件夹。 Lib 包含所有 jar 库和 src - 包含 java 个文件的包。
运行 ant run
报错:
run:
[java] Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/type/TypeReference
据我所知,在 lib 文件夹下找不到名为 Jackson 的库 jar...我的链接一定是错误的。有什么建议吗?
谢谢!
更新:根据@AR.3 的建议更新了 build.xml 文件,问题仍然存在
使所有属性中的所有路径成为绝对路径(通过在 src.dir
、build.dir
和 lib.dir
前加上 ${basedir}/
前缀)。因此您不必依赖工作目录。 <java>
task you 运行 in run
target 可能使用 ${jar.dir}
作为工作目录,你的类路径(解析为相对路径)将指向不存在的 build/jar/lib/*.jar
.
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="lib.dir" value="${basedir}/lib"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="main-class" value="ye.tian.Main"/>
<property name="jar.dir" value="${build.dir}/jar"/>
我的 ant 构建文件如下所示:
<project name="Algorithm" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="main-class" value="ye.tian.Main"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="lib.dir" value="lib"/>
<path id="myclasspath">
<fileset dir="${lib.dir}" includes="*.jar"/>
</path>
<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="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="myclasspath"/>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" classpathref="myclasspath" fork="true"/>
</target>
我的项目结构是:根文件夹,里面有两个名为 src 和 lib 的文件夹。 Lib 包含所有 jar 库和 src - 包含 java 个文件的包。
运行 ant run
报错:
run:
[java] Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/type/TypeReference
据我所知,在 lib 文件夹下找不到名为 Jackson 的库 jar...我的链接一定是错误的。有什么建议吗?
谢谢!
更新:根据@AR.3 的建议更新了 build.xml 文件,问题仍然存在
使所有属性中的所有路径成为绝对路径(通过在 src.dir
、build.dir
和 lib.dir
前加上 ${basedir}/
前缀)。因此您不必依赖工作目录。 <java>
task you 运行 in run
target 可能使用 ${jar.dir}
作为工作目录,你的类路径(解析为相对路径)将指向不存在的 build/jar/lib/*.jar
.
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="lib.dir" value="${basedir}/lib"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="main-class" value="ye.tian.Main"/>
<property name="jar.dir" value="${build.dir}/jar"/>