如何覆盖存放在ant lib目录中的ant任务

在我的工作中,我们在一些Java项目中使用AspectJ。 为了使这与ant构建一起使用,我们一直将aspectjtools.jar放在ant / lib /中。

我现在正在研究一个特定的Java项目,需要使用更新版本的aspectJ。 我不想让所有使用该项目的人更新其aspectjtools.jar的本地副本。 相反,我尝试将较新的aspectjtools.jar添加到项目的lib目录中,并将以下行添加到build.xml。

 

但是,这并不像我希望的那样,因为ANT类加载器从ant / lib /优先加载到我在taskdef类路径中指定的jar的jar。

有没有办法强迫ant选择检查我项目的jar?

你能不能只更新iajc编译目标以在类路径上使用新的jar?

不可能强制类加载器更喜欢给定的jar文件而不是另一个。 如果您必须与同一个类的多个版本相关,那么您应该考虑OSGI。

最简单的解决方案是只使用项目中的库或Maven / Ivy存储库,并忽略全局ant文件夹中的库。

一个例子:

                    

更新:您还必须使用另一个Ant。 如果您正在使用Eclipse,请直接从Ant视图中尝试捆绑的。

你还有另一个选择,但它有点困难。 那就是使用AspectJ加载时编织。 如果选择该选项,则可以使用普通编译任务进行编译,但必须在启动时使用JVM代理进行编织。 你可以在这里阅读更多相关信息。

我希望这有帮助!

我的问题的最终答案是否定的。 目前,ANT无法使用项目中的任务jar而不是ANT lib目录中的任务jar。

这个有可能。 您需要利用这个额外的任务来创建一个新的类加载器

http://enitsys.sourceforge.net/ant-classloadertask/