Ant - 没有公共 execute() 错误,即使它在那里



我有一个用于编译项目的 Ant 脚本,最近我一直在尝试实现 Maven 到该项目来处理库引用。我设法做了一个'ok'并创建了一个pom.xml脚本,该脚本将库复制到lib文件夹中,然后调用Ant的build.xml来构建整个项目。

但是后来我试图让 ant 从项目的主类调用一个函数(通过让它扩展 Task 类并实现 execute() 方法),但由于某种原因,构建.xml脚本说该函数不存在。它找到类,好吧,但找不到函数。更奇怪的是,我在以前没有实现Maven的版本中尝试过它,而且它工作得很好。

这是 ant 构建中的位.xml用于设置路径并定义任务:

<path id="classes">
    <pathelement path="${basedir}/bin" />
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<taskdef name="getVersionTask" 
    classname="us.inswitch.jreport.JReport" 
classpathref="classes"/>
<getVersionTask/>

简而言之,这就是有问题的类(删除了不必要的东西):

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class JReport extends Task {
    public void execute() throws BuildException {
        getProject().setProperty("version", version);
        Date date;
        date=new Date();
        DateFormat format=DateFormat.getDateInstance();
        getProject().setProperty("date",format.format(date));
    }
}

在这两种项目情况下,文件始终相同。

我认为,不知何故,一个是Maven项目,另一个不是Maven项目正在影响某些事情。即使在复制目录中的 ant 文件而不是使用 Maven 引用它们之后,错误仍然存在。如果我尝试在 Maven 项目上单独运行构建脚本,它会崩溃并布置以下消息堆:

[javac] import org.apache.tools.ant.BuildException;
[javac]                            ^
[javac] C:UsersuserDocumentsworkspacejreport-mavensrcusinswitchjreportJReport.java:9: package org.apache.tools.ant does not exist
[javac] import org.apache.tools.ant.Task;
[javac]                            ^
[javac] C:UsersuserDocumentsworkspacejreport-mavensrcusinswitchjreportJReport.java:19: cannot find symbol
[javac] symbol: class Task
[javac] public class JReport extends Task {
[javac]                              ^
[javac] C:UsersuserDocumentsworkspacejreport-mavensrcusinswitchjreportJReport.java:115: cannot find symbol
[javac] symbol  : class BuildException
[javac] location: class us.inswitch.jreport.JReport
[javac]     public void execute() throws BuildException {
[javac]                                  ^
[javac] C:UsersuserDocumentsworkspacejreport-mavensrcusinswitchjreportJReport.java:116: cannot find symbol
[javac] symbol  : method getProject()
[javac] location: class us.inswitch.jreport.JReport
[javac]         getProject().setProperty("version", version);
[javac]         ^
[javac] C:UsersuserDocumentsworkspacejreport-mavensrcusinswitchjreportJReport.java:120: cannot find symbol
[javac] symbol  : method getProject()
[javac] location: class us.inswitch.jreport.JReport
[javac]         getProject().setProperty("date",format.format(date));
[javac]         ^
[javac] 6 errors

有什么想法吗?

错误消息非常清楚:

[javac] ... package org.apache.tools.ant does not exist
[javac] import org.apache.tools.ant.Task;
[javac]                            ^

在编译过程中,javac类路径中需要 ant.jar 文件。

如果你想使用Maven存储库进行依赖管理,你可能想考虑使用常春藤。Ivy 是一个依赖管理器,可以由 Ant 使用,并且可以(如果是这样配置)使用 Maven 存储库。

在我目前的位置,我们公司生产了很多用于其他项目的罐子。最初,他们尝试将这些jar下载到项目中,然后使用过于复杂的系统来获取仍然不起作用的jar。我能够将 Ivy 整合到当前的构建系统中。

迁移到Maven意味着对所有项目进行彻底检修,并且不能100%确定我们生产的内容是正确的。使用 Ivy 使我能够以最少的更改处理依赖关系管理问题。另外,它使我能够尽快解决此问题。

相关内容

最新更新