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

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

这是ant build.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项目,而另一个不是一个正在影响某事。即使将ant文件复制到目录中而不是使用Maven引用它们之后,错误仍然存​​在。如果我尝试在Maven项目上单独运行构建脚本,它将崩溃并布置以下消息堆:

[javac] import org.apache.tools.ant.BuildException;
[javac]                            ^
[javac] C:\Users\user\Documents\workspace\jreport-maven\src\us\inswitch\jreport\JReport.java:9: package org.apache.tools.ant does not exist
[javac] import org.apache.tools.ant.Task;
[javac]                            ^
[javac] C:\Users\user\Documents\workspace\jreport-maven\src\us\inswitch\jreport\JReport.java:19: cannot find symbol
[javac] symbol: class Task
[javac] public class JReport extends Task {
[javac]                              ^
[javac] C:\Users\user\Documents\workspace\jreport-maven\src\us\inswitch\jreport\JReport.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:\Users\user\Documents\workspace\jreport-maven\src\us\inswitch\jreport\JReport.java:116: cannot find symbol
[javac] symbol  : method getProject()
[javac] location: class us.inswitch.jreport.JReport
[javac]         getProject().setProperty("version", version);
[javac]         ^
[javac] C:\Users\user\Documents\workspace\jreport-maven\src\us\inswitch\jreport\JReport.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。 Ivy是Ant可以使用的依赖项管理器,并且可以(如果已配置)使用Maven存储库。

在我目前的位置,我们公司生产许多罐子,这些罐子可以用于其他项目。最初,他们尝试将这些jar下载到项目中,然后使用一个过于复杂的系统来提取仍无法使用的jar。我能够将Ivy合并到当前的构建系统中。

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

09-10 06:49
查看更多