Java的痛

jopen 10年前

  英文原文:Java Pain

  在 2014 年,如果一个程序员在命令行中运行一段简单的程序变得非常困难,那么这就是不正常的。

  我写了些代码去连接 Keybase OpenKeychain, 本计划写更多。因为这是一个 Android App,而且代码是用 Java 写的,我相信也有很多人使用 Java,那些人有能力使用它,所以我也用了。但是这个东西写起来不应该这么困难。

  我的 Java 代码已经在线上可以正常工作了,所以我把它们从 OpenK­ey­chain 中拷出来,然后创建了一个新的项目,然后我想我应该可以从命令行跑起来,然后集成测试一下(smoke test)。

  但是!行不通。首先它不停地在 Java 命令行提示,它缺少我项目中的一些 class 文件和 json.org 库(其实我早就已经下载了,所以我才能编绎这个笨蛋程序)。对的,我十年前已经知道这个东西了,这一步真不应该有什么复杂的。

  当我指定以后,它拒绝运行,因为我想去从 https:// 抓取内容(你懂的)。但是不行,Java 7 做不到,好吧,我真的不知道为什么。在一些认证表(certs table)中有一些无法理解的补丁。所以 Java 7 不行了,OS X 也不行了,一切都不行了,然后它无法正常工作了;显然,你可以在底层安全机制里修复它。但是我是只想从该死的(fucking)的 https 连接处抓取一些内容,并不想动任何其他任何代码。顺便提一下,curl 可以在命令行里从一样的地址里获取这些东西,但是 Java 做不以。

  (注* curl 为 linux 中的一条命令)

  所以最简单的解决办法是创建一个子 Android 项目叫 KeybaseTest, 设置一个空的 TextView 然后我就可以写类似下面的代码。

printf ("%d %s", http­s_s­ta­tus, http­s_mes­sage_­body);

  当然,为了这样搞,我不得不将我的 Mac 机连接到一台真正的 Android 设备,然后只是为了运行这段简单的代码,然后我就可以使用 adb 指令开始调试了。

  记住!这是最简单的运行 Java 代码的方式。

亲爱的 Java: 我可以在命令行里直接运行 Ruby 或 Python 或 Go 或 JavaScript 或C代码。但是我运行不了你,这是不是意味着你已经快不行了?

  现在,我的 Keybase Java 客户端已经被重构成了一个 Android 项目,因为就像我之前说的,在 2014 年,最简单运行 Java 程序的办法是连上一台我自己拥有的互联网设备。

  评论:这里有很多评论,“Tim Bray 指出这种问题只有 Java 初学者才会遇到,我不关心这个人是谁,但是我不想花时间去学习其它工具”。

  但是事实上这个家伙是 Xml 规范的联合起草人,而且是 sun 技术部门的总监,显然它不是初学者! 更多评论参见 Hack News.

来自: ourjs.com