使用Ant编译build.xml文件

时间:2012-08-21 15:54:25

标签: ant jasper-reports

我最近在 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 &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> 

3 个答案:

答案 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而不是。