Java 构建;有了这些要求,什么是好的选择?

标签 java ant maven build makefile

这是关于构建 Java 项目的。

所以我对这里的选择有点困惑。

我的要求(这是一个小项目):

  • 需要使用特定/自定义编译器参数编译 Java 项目

  • 项目有需要包含的 native 库

  • 需要通过Rhino javascript编译器编译javascript->java类(https://developer.mozilla.org/en/Rhino/JavaScript_Compiler)

  • 构建完成后,我需要运行另一个命令:ProGuard (http://proguard.sourceforge.net/)

  • 运行 javadocs

  • 将所有内容打包到 Jar 中(还包括外部数据,即图像、xml、ini 等)

  • 构建/创建 .jnlp Web 启动。

  • 在 Win 和 Linux 下都可用是最佳选择。

  • 这是一个业余爱好项目,因此不想花费数周时间学习/管理构建系统。从开始到完成最多需要 8-12 小时的投资(否则最好继续手工完成所有事情)。

  • 顺便说一句,如果重要的话,我的 IDE 是 Eclipse;一个好的集成插件会很好 - 但不是必需的。

到目前为止,我认为 Ant 和 Maven 是主要使用的两个构建系统。我很不清楚我应该使用哪一个或者它们有何不同?

另一个选项是 linux 下的“make”(或者可能是 cygwin)。我只使用过一次,但似乎很快就可以开始/工作。这对于 Java 或这个项目来说是一个好的选择吗?有什么缺点吗?为什么没有更多的 Java 开发人员使用它?

还有其他选择吗?

最佳答案

简而言之:花 12 个小时学习和使用 Ant。

Maven 开箱即用的感觉很好,非常容易上手,并且具有简洁的依赖关系管理,但是需要调整 pom.xml(项目的 Maven 构建文件)以满足您的需求比使用 Ant 更麻烦。

为了满足您的一些特定要求:

  • 您可以使用<compilerarg>带有 <javac> 的元素任务
  • 对于 native 库,您可以添加它们:<sysproperty>key="java.library.path"
  • 将 Rhino 与 Ant 结合使用 (http://stackoverflow.com/questions/3526960/using-recent-rhino-in-ant-script)
  • Ant 有一个 Proguard 任务 (http://proguard.sourceforge.net/index.html#/manual/ant.html)
  • 对于 javadoc Ant 附带 <javadoc>开箱即用的任务
  • <jar> Ant 任务非常容易使用来打包所有内容
  • 有一个 <jw:jnlpwar>可以从 [Ant Web Start Task 项目] (http://ant-jnlp-war.sourceforge.net) 获取该任务
  • Ant 无处不在,它适用于几乎所有主要平台(Linux、Unix、Windows、MacOS)
  • 网络上有大量文档和示例,您很快就会学会 Ant,而且您花在学习它上的时间可能会在使用它的几周内得到返回。您的构建。
  • Eclipse 与 Ant 集成,开箱即用 (http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.user/gettingStarted/qs-81_basics.htm)

它可能不会像 Maven 那样进行花哨的开箱即用的依赖管理(尽管您可以将 Ant 与 Ivy 集成),但它确实为您提供了所需的所有灵 active ,而且您不会发现自己在“对抗”构建工具配置文件,因为这在 Maven 中相当常见。

我可能应该提及 Java 构建(和 CI)工具中的 2 个新名称: HudsonJenkins 。它们是最近才出现的,可能看起来很有趣,但我绝对不会在这个早期阶段向您和您的项目推荐它们。

注意:对于缺乏真实链接表示歉意(仅允许 2 个链接 atm)

关于Java 构建;有了这些要求,什么是好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088414/

相关文章:

java - 如何通过循环动态添加JPanel?

java - java中的URL连接

ant - 如何为 checkstyle 定义抑制定义,同时适用于 ant 和 eclipse

java - 如何使用 Apache Ant 将目录或文件 glob 指定为 javac 类路径值?

spring - Hibernate 不创建表 postgreSQL

maven - Intellij Idea maven 存储库远程错误

Linux (Ubuntu) 中的 Java 系统托盘应用程序从服务(守护程序)启动

java - 如何打印二叉树中节点数最多的级别?

java - 如何指定在 Ivy 中使用哪个 jar 签名者

java - Android Maven 无法解析配置的依赖关系