我正在尝试构建一个需要eclipse特定任务的无头构建。
为了启动ant构建文件,我使用以下命令。我是这样做的,因为我相信它允许我运行以前抱怨他们需要工作空间运行的eclipse任务。如果这是不正确/如果有更好的方法,请通知我。
我的批处理脚本:
java -jar %EQUINOX_LAUNCHER_JAR% -application org.eclipse.ant.core.antRunner -buildfile %ANT_SCRIPT_JAR% -data %WORKSPACE_PATH%
在我的ant构建文件中,我需要定义一个任务:
<taskdef name="myTask" classname="path.to.class.with.execute"><classpath><pathelement location="path\to\dependency.jar"/></classpath></taskdef>
运行时
<myTask/>
我得到了
java.lang.NoClassDefFoundError: path/to/class/that/I/tried/to/import
答案 0 :(得分:1)
您的任务代码使用的类必须位于类路径中。一种选择是在定义任务时将它们显式添加到类路径中:
<taskdef name="myTask" classname="path.to.class.with.execute">
<classpath>
<pathelement location="path/to/dependency.jar"/>
<pathelement location="path/to/transitive-dependency.jar"/>
<pathelement location="path/to/other-transitive-dependency.jar"/>
</classpath>
</taskdef>
如果所有.jar文件都在同一目录树中,您可以将其缩短为:
<taskdef name="myTask" classname="path.to.class.with.execute">
<classpath>
<fileset dir="path/to/dir" includes="**/*.jar"/>
</classpath>
</taskdef>
另一种可能性是将Class-Path
属性添加到包含任务类的.jar的清单中。属性的值是以空格分隔的相对URL列表,其隐含的基础是清单所在的.jar文件。例如:
Class-Path: transitive-dependency.jar utils/other-transitive-dependency.jar
如果您在Ant中构建任务.jar本身,则可以在Ant的jar任务中指定Class-Path属性:
<jar destfile="task.jar">
<fileset dir="classes"/>
<manifest>
<attribute name="Class-Path"
value="transitive-dependency.jar utils/other-transitive-dependency.jar"/>
</manifest>
</jar>