2

我最近在我的Ubuntu机器上安装了Ant 1.8.4JasperReports 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

当我尝试使用命令在JasperReports演示示例目录中运行演示构建文件时,ant我收到以下错误:

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 &quot;srcdir&quot; in the &lt;jrc&gt; 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> 
4

3 回答 3

2

我通过将 CLASSPATH 中的以下元素 /opt/jasperreports-4.6.0/lib/ant-1.7.1.jar 更改为 /opt/ant/lib/ant.jar 使其工作。感谢 Alex 发布有用的链接!安詹

于 2012-08-21T19:47:52.350 回答
2

Ant脚本正在使用自定义任务jrc

从下面的代码片段中可以看到(这是来自jasperreports-4.6.0/demo/samples/antcompile文件夹的build.xml文件),此任务的定义引用了来自同一构建文件的类路径。

<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包的版本。

您可以阅读有关Project#createTask 抱怨它在Ant的 bugtracker 和project.createTask() not working with ant-1.8.2 post上找不到任务 componentdef问题。

于 2012-08-21T18:56:01.670 回答
0

你得在这里帮我们一点忙……

您正在构建 JasperReports-4.6.0 吗?或者,您是否使用 JasperReports 作为您的build.xml? 这是build.xml演示 JasperReports 的测试吗?

错误提示Check that any custom tasks/types have been declared,那么第 37 行中的 Ant 任务是什么?有一个吗?它是否定义了类路径如果您有taskdef,请让我们看看它是什么,以及自定义任务是什么。build.xml

我正在下载 iReport 看看我是否能弄清楚你在做什么,但这需要 15 分钟。我打赌你应该把一些罐子放进去$ANT_HOME/lib。也许是 JasperReports 或 iReport jarfile。

一旦我可以下载 iReport 并看到你在说什么,我会更新我的答案。

同时,将第 35 行周围的相关代码包含在您的文件中build.xml,并将taskdef任务包含在您的build.xml.


下载完iReport,里面没有build.xml文件。您将不得不发布您的代码,以便我们查看它。

同样,我的假设是他们认为你会坚持/opt/ant/lib并没有坚持的一些 jar 文件。

于 2012-08-21T18:24:15.583 回答