我最近在 Ubuntu 计算机上安装了 Ant 1.8.4 和 JasperReports 4.6.0 。
我的帐户设置了以下环境变量:
PATH=$PATH:/opt/ant/bin
export PATH
export ANT_HOME=/opt/ant
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
当我尝试使用命令ant
在 JasperReports 演示示例目录中运行演示构建文件时,出现以下错误:
Buildfile: build.xml
BUILD FAILED
/opt/jasperreports-4.6.0/demo/samples/antcompile/build.xml:3: The following
error occurred while executing this line:
jar:file:/opt/ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml:37: Problem: failed to create task or type componentdef
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
解决这个问题的任何帮助都会非常有帮助。
build.xml 文件的片段:
<project name="antcompile" default="test" basedir=".">
<description>Shows how multiple JRXML files can be compiled in batch mode using ANT.</description>
<path id="classpath">
<pathelement location="../../../build/classes"/>
<fileset dir="../../../lib">
<include name="**/*.jar"/>
</fileset>
</path>
<path id="runClasspath">
<path refid="classpath"/>
<pathelement location="../../fonts"/>
<pathelement location="./build/classes"/>
</path>
<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath"/>
</taskdef>
<target name="javac" description="Compiles the Java source files used in the report designs.">
<mkdir dir="./build/classes"/>
<javac srcdir="./src" destdir="./build/classes" debug="true" optimize="false" deprecation="false"/>
</target>
<target name="compile1" description="Compiles report designs specified using the "srcdir" in the <jrc> tag."> <!-- 27 row # -->
<mkdir dir="./build/reports"/>
<jrc
srcdir="./reports"
destdir="./build/reports"
tempdir="./build/reports"
keepjava="true"
xmlvalidation="true">
<classpath refid="runClasspath"/>
<include name="**/*.jrxml"/>
</jrc>
</target>
答案 0 :(得分:2)
此 Ant 脚本使用自定义任务 jrc 。
正如您从下面的代码段中看到的(这是 jasperreports-4.6.0 / demo / samples / antcompile strong>文件夹),此任务的定义引用同一构建文件中的类路径。
<path id="classpath">
<pathelement location="../../../build/classes"/>
<fileset dir="../../../lib">
<include name="**/*.jar"/>
</fileset>
</path>
...
<taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid="classpath"/>
</taskdef>
您应该检查 ../../../ build / classes 文件夹(在 JasperReports 包的文件夹结构中,其中包含示例) - net.sf.jasperreports.ant.JRAntCompileTask 类必须在那里。
换句话说,您应该将此类(或 jasperreports-4.6.0.jar )放入类路径( path id="classpath"
)。
您问题的另一个可能来源是 Ant 包的版本。
您可以在 Ant 的bugtracker和Project#createTask complains it wouldn't find task componentdef帖子上阅读有关project.createTask() not working with ant-1.8.2问题的信息。
答案 1 :(得分:2)
我通过将CLASSPATH中的以下元素/opt/jasperreports-4.6.0/lib/ant-1.7.1.jar更改为/opt/ant/lib/ant.jar来实现。 感谢Alex发布有用的链接! 安键
答案 2 :(得分:0)
你必须在这里帮助我们......
您在构建JasperReports-4.6.0吗?或者,您使用JasperReports作为build.xml
的一部分吗?这是一个测试build.xml
演示JasperReports吗?
错误说检查是否已声明任何自定义任务/类型,那么#37行中的Ant任务是什么? build.xml
中有吗?它是否定义了类路径?如果您有 taskdef ,请让我们看看它是什么,以及自定义任务是什么。
我正在下载iReport以查看我是否可以弄清楚你在做什么,但这需要15分钟。我打赌你应该把一些罐子放进$ANT_HOME/lib
。也许是JasperReports或iReport jarfile。
只要我下载iReport并看到你在说什么,我就会更新我的答案。
同时,请在build.xml
中的第35行和您taskdef
中的build.xml
任务中包含相关代码。
完成下载iReport并且其中没有build.xml 文件。您将不得不发布您的代码,因此我们可以查看它。
同样,我的假设是有一些jar文件,他们认为你会坚持/opt/ant/lib
而不是。