如何覆盖存放在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。