ant,jar文件和Class-Path哦我的

我正在尝试重新构建我的构建技术,用于创建依赖于常见第三方jar文件的Java jar文件。 (GlazedLists,Apache Commons等)

我一直把它们全都扔进{Java JRE dir} / lib / ext,所以它们会被JRE自动看到,但这导致了一些问题,比如不记得我需要分发某些jar文件,所以我想学习更明确。

所以我将它们全部移动到c:\ appl \ java \ common \中,将它们添加到Eclipse构建路径中,并在我的ant文件中定义它:

        

我将Class-Path清单头设置为“。” 在我的jar任务中但即使我将相关的jar文件放入与我的应用程序jar文件相同的目录中,这似乎也不起作用。 我可以将它们一个一个地手动添加到Class-Path标头中,但我想知道,是否有更简单的方法来正确设置Class-Path标头?

这就是你所需要的:

               

您可能已经看到,它假定您已经编译了Java类并将它们输出到${build} 。 它还假设您已将jar文件复制到${dist}/lib

也就是说,值得研究其他内置支持依赖关系的构建系统,例如Maven和Gradle。 这些其他构建系统已经考虑了许多常见的项目结构和构建操作,因此您不必将所有内容编写到最后的细节。

你想要的是一个映射器 。 Flattenmapper可能是最简单的,但实质上你需要创建一个指定类路径的路径元素,然后在其上使用pathconvert将其转换为可以包含在清单中的字符串。

编辑:您可以使用包含规则来构建路径元素,因此以jar结尾的目录中的所有内容都将是**/*.jar

使用ant 1.7及之后,manifestclasspath任务就是前进的方向。 如果您使用1.7之前的ant版本,则manifestclasspath任务不存在。

以下结果相同: –

                       

默认情况下,出于安全原因,类路径目录不包含Jar文件。 有人可以在那里放置一个jar文件,它可以在你不知情的情况下加载,覆盖你的代码。 我知道有关于添加另一个标志或结束标记的讨论,以允许将Jar文件添加到类路径中,但是,如果我的内存服务,那将是版本7.但是,我在最后一部分可能是错的。

jar文件的Class-Path清单标头要求您显式列出要包含的jar文件。 在类路径中列出目录意味着java将在该目录中查找.class文件,而不是jar文件。

由于你在Ant中,你可能不想切换,但是Maven非常擅长识别所有依赖项,并且有几个工具可以将lib jar复制或组合在一起用于分发目的。 为了我的目的,我有一个Maven插件,在构建期间创建一个运行脚本,然后为我设置类路径,所以我不需要担心它。