Java ANT:build.xml的问题
我想知道是否有人能帮我解决一个严重的问题。。。 我需要从一个使用大量依赖项的项目中创建一个jar。。。 问题是:我亲手编写的build.xml文件无法工作。 更具体地说,它运行时没有任何问题,只是一个警告:Java ANT:build.xml的问题,java,ant,dependencies,classnotfoundexception,Java,Ant,Dependencies,Classnotfoundexception,我想知道是否有人能帮我解决一个严重的问题。。。 我需要从一个使用大量依赖项的项目中创建一个jar。。。 问题是:我亲手编写的build.xml文件无法工作。 更具体地说,它运行时没有任何问题,只是一个警告: Buildfile: C:\Users\Alexis Fasquel\workspace\FirstEditServer\build.xml clean: [delete] Deleting directory C:\Users\Alexis Fasquel\workspace\Fir
Buildfile: C:\Users\Alexis Fasquel\workspace\FirstEditServer\build.xml
clean:
[delete] Deleting directory C:\Users\Alexis Fasquel\workspace\FirstEditServer\bin
[delete] Deleting directory C:\Users\Alexis Fasquel\workspace\FirstEditServer\dist
makedir:
[mkdir] Created dir: C:\Users\Alexis Fasquel\workspace\FirstEditServer\bin
[mkdir] Created dir: C:\Users\Alexis Fasquel\workspace\FirstEditServer\dist
compile:
[javac] C:\Users\Alexis Fasquel\workspace\FirstEditServer\build.xml:101: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 14 source files to C:\Users\Alexis Fasquel\workspace\FirstEditServer\bin
jar:
[jar] Building jar: C:\Users\Alexis Fasquel\workspace\FirstEditServer\dist\firstEditServer.jar
main:
BUILD SUCCESSFUL
Total time: 1 second
但不幸的是,我仍然有一些课程没有找到
我没有打印完整的跟踪,因为这是我尝试实例化的第一个类,但没有找到。。。所以我猜什么都没用。。。 但这是: 有我的build.xml文件。。。有人能看一下,也许能找出我的错误吗?
<?xml version="1.0"?>
<project name="Ant-Test" default="main" basedir=".">
<!-- Sets variables which can later be used. -->
<!-- The value of a property is accessed via ${} -->
<property name="src.dir" location="src" />
<property name="bin.dir" location="bin" />
<property name="gate.dir" location="gate" />
<property name="virtuoso.dir" location="virtuoso" />
<property name="recommendation.dir" location="recommendation" />
<property name="dist.dir" location="dist" />
<path id="bin.classpath">
<fileset dir="${virtuoso.dir}">
<include name="openrdf-sesame-2.6.5-onejar.jar" />
<include name="slf4j-api-1.5.0.jar" />
<include name="slf4j-jdk14-1.5.0.jar" />
<include name="virt_sesame2.jar" />
<include name="virtjdbc3.jar" />
</fileset>
<fileset dir="${gate.dir}">
<include name="plugins\Gazetteer_LKB\Gazetteer_LKB.jar" />
<include name="lib\gate.jar" />
<include name="lib\log4j.jar" />
<include name="lib\commons-io.jar" />
<include name="plugins\Tagger_Framework\TaggerFramework.jar" />
<include name="lib\ant-contrib.jar" />
<include name="lib\ant-launcher.jar" />
<include name="lib\ant.jar" />
<include name="lib\aopalliance.jar" />
<include name="lib\apache-mime4j-core.jar" />
<include name="lib\apache-mime4j-dom.jar" />
<include name="lib\bcmail-jdk15.jar" />
<include name="lib\bcprov-jdk15.jar" />
<include name="lib\commons-codec.jar" />
<include name="lib\commons-compress.jar" />
<include name="lib\commons-lang.jar" />
<include name="lib\commons-logging.jar" />
<include name="lib\dom4j.jar" />
<include name="lib\fontbox.jar" />
<include name="lib\gate-asm.jar" />
<include name="lib\gate-compiler-jdt.jar" />
<include name="lib\lucene-core.jar" />
<include name="lib\metadata-extractor.jar" />
<include name="lib\nekohtml.jar" />
<include name="lib\pdfbox.jar" />
<include name="lib\poi-ooxml-schemas.jar" />
<include name="lib\poi-ooxml.jar" />
<include name="lib\poi-scratchpad.jar" />
<include name="lib\poi.jar" />
<include name="lib\spring-aop.jar" />
<include name="lib\spring-beans.jar" />
<include name="lib\spring-core.jar" />
<include name="lib\tika-core.jar" />
<include name="lib\tika-parsers.jar" />
<include name="lib\wstx-lgpl.jar" />
<include name="lib\xercesImpl.jar" />
<include name="lib\xmlbeans.jar" />
<include name="lib\xmlunit.jar" />
<include name="lib\xpp3.jar" />
<include name="lib\xstream.jar" />
<include name="lib\ivy.jar" />
<include name="lib\java-getopt.jar" />
<include name="lib\java2html.jar" />
<include name="lib\javacc.jar" />
<include name="lib\jaxen.jar" />
<include name="lib\jdom.jar" />
<include name="lib\jempbox.jar" />
<include name="lib\junit.jar" />
<include name="plugins\Gazetteer_LKB\lib\commons-cli-1.1.jar" />
<include name="plugins\Gazetteer_LKB\lib\commons-collections-3.2.1.jar" />
<include name="plugins\Gazetteer_LKB\lib\commons-httpclient-3.1.jar" />
<include name="plugins\Gazetteer_LKB\lib\kim-api-3.0-RC5.jar" />
<include name="plugins\Gazetteer_LKB\lib\kim-util-3.0-RC5.jar" />
<include name="plugins\Gazetteer_LKB\lib\owlim-lite-4.3.jar" />
<include name="plugins\Gazetteer_LKB\lib\trove4j-2.0.2.jar" />
<include name="plugins\Gazetteer_LKB\lib\openrdf-sesame-2.6.3-onejar.jar" />
<include name="plugins\Gazetteer_LKB\lib\slf4j-api-1.5.11.jar" />
<include name="plugins\Gazetteer_LKB\lib\slf4j-log4j12-1.5.11.jar" />
</fileset>
<fileset dir="${recommendation.dir}">
<include name="simmetrics_jar_v1_6_2_d07_02_07.jar" />
</fileset>
</path>
<!-- Deletes the existing bin, docs and dist directory-->
<target name="clean">
<delete dir="${bin.dir}" />
<delete dir="${dist.dir}" />
</target>
<!-- Creates the bin and dist directory-->
<target name="makedir">
<mkdir dir="${bin.dir}" />
<mkdir dir="${dist.dir}" />
</target>
<!-- Compiles the java code (including the usage of library for JUnit -->
<target name="compile" depends="clean, makedir">
<javac srcdir="${src.dir}" destdir="${bin.dir}" classpathref="bin.classpath">
</javac>
</target>
<!--Creates the deployable jar file -->
<target name="jar" depends="compile">
<jar destfile="${dist.dir}\firstEditServer.jar" basedir="${bin.dir}">
<manifest>
<attribute name="Main-Class" value="com.firstedit.main.Main" />
</manifest>
</jar>
</target>
<target name="main" depends="compile, jar">
<description>Main target</description>
</target>
</project>
主要目标
正如您所看到的,GateException实际上在gate.jar中
假设它找不到的类位于jar文件lib\gate.jar中,我想说的是,您正在从项目的源代码构建jar(firstEditServer.jar)文件,仅此而已。为了执行该jar,您还需要确保库中的所有jar文件。。。目录也在类路径中 现在,如果您想要构建一个包含库jar中所有类的jar文件,那么您必须以稍微不同的方式构建jar文件。您不能构建包含其他jar的可执行jar(具有主类属性的jar)。标准类加载器不会在一个jar中查找其他jar文件。因此,您需要将库jars类扩展到最终的jar中 Ant使用下面类似的方式对此提供支持。zipgroupfileset是一项任务,它将获取jar文件列表,展开它们,并将类本身包含到目标jar中。我过滤掉manifest.mf和properties文件,这样它们就不会与我自己的文件(例如库jar中的log4j.properties文件)冲突 这将创建一个包含所有lib jar的所有内容的jar。清单文件将发生冲突,最后看到的清单文件将获胜
<jar destfile='${build.dir}/lib-jars.jar'>
<zipgroupfileset dir='${lib.dir}'>
<include name='**/*.jar'/>
</zipgroupfileset>
</jar>
这里与单个罐子一起使用的zipfileset可以从所需的一个罐子中过滤出任何内容。这将删除MANIFEST.MF文件,但也可能删除带有附加排除标记的其他文件
<jar destfile='${jar.file}' basedir='${classes.dir}'>
<zipfileset src='${build.dir}/lib-jars.jar'>
<exclude name="META-INF/MANIFEST.MF"/>
</zipfileset>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="${main.class}"/>
<section name="common">
<attribute name="Specification-Title" value="${project.title}"/>
<attribute name="Specification-Version" value="${release.version}"/>
<attribute name="Specification-Vendor" value="${vendor}"/>
<attribute name="Implementation-Title" value="${project.title}"/>
<attribute name="Implementation-Version" value="${release.version} ${TODAY}"/>
<attribute name="Implementation-Vendor" value="${vendor}"/>
</section>
</manifest>
</jar>
确保lib文件夹位于类路径中。我也有类似的事情,我自己也做过,就像你一样。因为ant找到了罐子,所以构建是正常的。如果您正在构建jar,请确保清单将jar添加到清单文件中的类路径中。有一个清单选项,您可以让ant将清单文件添加到您的jar中。如果没有其他内容,请在命令行上运行程序,并使用-classpath选项指向lib文件夹。我认为你的问题围绕着你的课程路径,我已经打过很多次了。这不是一个答案,但它太长了,无法评论,所以
您可以执行以下步骤:
gate.util.gateException
publicstaticvoidmain(最终字符串[]args){
System.out.println(gateException.class.getName());
}
java-cp myjar.jar gate.util.gateException
java-jarmyjar.jar
gate.util.GateException
,但在异常堆栈中只有gate.util.gateExcepp
(但这可能就是问题所在)
让我知道这是否有效。如果我错了,请纠正我,但您没有使用ANT运行此jar,是吗?ANT只用于构建jar文件,对吗 有两种方法可以启动java程序
添加“非常紧急”不会加快某人回答您问题的过程。另外,请放完整的堆栈跟踪,而不仅仅是最上面一行。你甚至不说找不到什么类def。首先,我知道这不会加快进程,这只是事实。。。第二,完整的跟踪是无用的,因为它是我试图实例化的第一个类。。。但我会按你的意愿编辑以打印完整的跟踪。你是如何启动应用程序的?愚蠢的问题:你验证了吗
<jar destfile='${jar.file}' basedir='${classes.dir}'>
<zipfileset src='${build.dir}/lib-jars.jar'>
<exclude name="META-INF/MANIFEST.MF"/>
</zipfileset>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="${main.class}"/>
<section name="common">
<attribute name="Specification-Title" value="${project.title}"/>
<attribute name="Specification-Version" value="${release.version}"/>
<attribute name="Specification-Vendor" value="${vendor}"/>
<attribute name="Implementation-Title" value="${project.title}"/>
<attribute name="Implementation-Version" value="${release.version} ${TODAY}"/>
<attribute name="Implementation-Vendor" value="${vendor}"/>
</section>
</manifest>
</jar>