0

我正在尝试使用 ant 构建应用程序,运行应用程序的 main() 方法,运行 junit 测试,并将所有内容打包在一个 jar 文件中(source+build+libraries+build.xml)。这些类包括一个带有 main() 方法入口点的运行器类。

然而,目标是包含所有使用的库,如 junit.jar,以及 ant build.xml 本身。

我想知道可执行 jar 文件是否有办法运行 ant 构建文件 itslef 的选定目标,而不仅仅是 main() 方法。显然我不需要再次运行编译目标,而只需要 main() 方法(我的运行目标中的 java 元素)和 junit 目标。那可能吗?

非常感谢您的洞察力!

4

1 回答 1

3

“可执行jar”不是你想象的那样。它允许您将所有类打包在一起(您也可以向其中添加源代码,尽管我认为这没什么意义)并使用 jar 清单中的 Main-Class 属性声明一个主类。详情在这里

然后,您可以使用“ java -jar my.jar”命令行启动该 jar,该命令行将调用main()您指定的类的方法。您还可以通过清单文件中的属性指定类路径Class-Path,该属性可以指向应用程序所需的其他 jar。这并不意味着这些罐子被归档在你的罐子里;事实上,如果您这样做,JVM 将无法从这些 jar 中加载类,除非您采取特殊预防措施并编写自定义类加载器。

于 2009-08-01T05:40:38.387 回答