【发布时间】:2012-02-10 06:41:35
【问题描述】:
我想放置不同目录的路径(包含罐子,目前在d:/ext_jars)。
运行 build.xml 后。我希望该路径应该采用那个可运行的 jar。
由于类路径不存在(之前在c:/project/lib/*.jars 下,转换为D:/ext_jars),目前该jar 给我错误。
请帮助我,如何在 build.xml 的类路径中设置该外部目录?
我的代码在:build.xml
<?xml version="1.0"?>
<project name="MyProject" default="deploy" basedir="." >
<property file="manifest.mf" />
<property name="dir.src" value="src" />
<property name="dir.build" value="bin" />
<property name="dir.dist" value="dist/MyProject" />
<property name="dir.lib" value="lib" />
<!-- Creates the output directories -->
<target name="prepare">
<mkdir dir="${dir.build}" />
<mkdir dir="${dir.dist}" />
<mkdir dir="${dir.dist}/${dir.csvdata}" />
<mkdir dir="${dir.dist}/${dir.MH}" />
</target>
<target name="clean" description="Remove all generated files.">
<delete dir="${dir.build}" />
<delete dir="${dir.dist}" />
</target>
<path id="build.classpath">
<fileset dir="${dir.lib}">
<include name="**/*.jar" />
<include name="**/*.zip" />
</fileset>
</path>
<path id="build.classpath.ref">
<fileset dir="D:/ext_jars">
<include name="**/*.jar" />
<include name="**/*.zip" />
</fileset>
</path>
<target name="compile" depends="prepare" description="Compile all source code.">
<!--<javac srcdir="${dir.src}" destdir="${dir.build}" debug="true">-->
<javac destdir="${dir.build}" debug="true">
<classpath refid="build.classpath" />
<classpath refid="build.classpath.ref" />
<src path="src"/>
</javac>
<copy todir="${dir.build}">
<fileset dir="${dir.src}">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<pathconvert property="classpath" refid="build.classpath">
</pathconvert>
<pathconvert property="classpath" refid="build.classpath.ref">
</pathconvert>
<target name="jar" depends="compile" description="Generates ${project.name}.Jar in the 'dist' directory.">
<jar jarfile="${dir.dist}/${ant.project.name}.jar">
<fileset dir="${dir.build}" includes="**/*.*" />
<manifest>
<attribute name="Class-Path" value="${Class-Path}" />
<attribute name="Main-Class" value="${Main-Class}" />
</manifest>
</jar>
</target>
<target name="deploy" depends="clean,jar">
<copy todir="${dir.dist}/${dir.lib}">
<fileset dir="${dir.lib}">
<include name="**/*.jar" />
<include name="**/*.zip" />
</fileset>
</copy>
</target>
使用此代码运行项目后运行良好,但运行此代码创建的jar后却没有运行它通过错误如下:
Exception in thread "main" java.lang.NoClassDefFoundError: dowlibpkg/DowLib
at mypkg.MainApp.main(MainApp.java:109)
Caused by: java.lang.ClassNotFoundException: dowlibpkg.DowLib
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
所以创建的 Jar 没有运行../ 我希望它运行,任何人都可以帮助我
================================================ ===============
manifest.mf
清单版本:1.0 类路径:lib/org.springframework.asm-3.0.1.RELEASE\lib/org.springframework.beans-3.0.1.RELEASE\lib/org.springframework.context-3.0.1.RELEASE\lib/org。 springframework.core-3.0.1.RELEASE\lib/org.springframework.expression-3.0.1.RELEASE\lib/org.springframework.oxm-3.0.1.RELEASE\lib/org.springframework.web-3.0.1。释放 主类:myProject.MainApp
【问题讨论】:
-
你指的是Ant任务的build.xml吗?您是指类路径中的路径吗?
-
@ee 是的。我正在使用 Ant 构建运行。
-
您的意思是要在一组外部 jar 中添加一些 ant 任务?
-
问题是Ant项目基础是由它的
basedir属性定义的,如下:the base directory from which all path calculations are done. This attribute might be overridden by setting the "basedir" property beforehand. When this is done, it must be omitted in the project tag. If neither the attribute nor the property have been set, the parent directory of the buildfile will be used.ant.apache.org/manual/using.html基本上,这意味着Ant项目总是相对于build.xml位于或相对于它的 basedir 属性... -
也许,通过在 Ant 元素中设置
relative=false属性可以覆盖此相对路径行为以成为绝对路径...但是,我不确定...您可能需要检查关于relative属性可以在哪个 Ant 元素中找到的 Ant 文档...
标签: java ant classpath relative-path build.xml