Ant - 没有 public execute() 错误,即使它存在
Ant - No public execute() error, even though it is there
我有一个用于编译项目的 Ant 脚本,最近我一直在尝试对所述项目实施 Maven 以处理库引用。我设法做到了,并创建了一个 pom.xml 脚本,将库复制到 lib 文件夹中,然后调用 Ant 的 build.xml 来构建整个项目。
但后来我尝试让 ant 从项目的主要 class 调用一个函数(通过使其扩展任务 class 并实现 execute() 方法),但对于一些build.xml 脚本说该函数不存在的原因。它找到 class,好吧,但找不到函数。更奇怪的是,我在没有实现 Maven 的以前的版本中尝试过它,并且它工作得很好。
这是蚂蚁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/>
简而言之,这是有问题的 class(删除了不必要的东西):
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:\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] ^
在编译期间,您需要 ant.jar 文件在您的 javac
类路径中。
如果您想使用 Maven 存储库进行依赖管理,您可能需要考虑使用 Ivy。 Ivy 是一个可以被 Ant 使用的依赖管理器,并且可以(如果这样配置)使用 Maven 存储库。
在我目前所在的位置,我们公司生产了很多用于其他项目的罐子。最初,他们尝试将这些 jar 下载到项目中,然后使用过于复杂的系统来获取仍然无法正常工作的 jar。我能够将 Ivy 合并到当前的构建系统中。
转向 Maven 意味着对所有项目进行全面检查,并且不能 100% 确定我们生产的产品是否正确。使用 Ivy 使我能够以最少的更改来处理依赖项管理问题。另外,它让我尽快解决了这个问题。
我有一个用于编译项目的 Ant 脚本,最近我一直在尝试对所述项目实施 Maven 以处理库引用。我设法做到了,并创建了一个 pom.xml 脚本,将库复制到 lib 文件夹中,然后调用 Ant 的 build.xml 来构建整个项目。
但后来我尝试让 ant 从项目的主要 class 调用一个函数(通过使其扩展任务 class 并实现 execute() 方法),但对于一些build.xml 脚本说该函数不存在的原因。它找到 class,好吧,但找不到函数。更奇怪的是,我在没有实现 Maven 的以前的版本中尝试过它,并且它工作得很好。
这是蚂蚁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/>
简而言之,这是有问题的 class(删除了不必要的东西):
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:\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] ^
在编译期间,您需要 ant.jar 文件在您的 javac
类路径中。
如果您想使用 Maven 存储库进行依赖管理,您可能需要考虑使用 Ivy。 Ivy 是一个可以被 Ant 使用的依赖管理器,并且可以(如果这样配置)使用 Maven 存储库。
在我目前所在的位置,我们公司生产了很多用于其他项目的罐子。最初,他们尝试将这些 jar 下载到项目中,然后使用过于复杂的系统来获取仍然无法正常工作的 jar。我能够将 Ivy 合并到当前的构建系统中。
转向 Maven 意味着对所有项目进行全面检查,并且不能 100% 确定我们生产的产品是否正确。使用 Ivy 使我能够以最少的更改来处理依赖项管理问题。另外,它让我尽快解决了这个问题。