编写 Java 命令行工具很麻烦……还是???
2020-04-30 12:19
756 查看
简单的Java工具
JDK自带了很多支持开发的命令行工具。但在我做过的每一个项目中,我发现我只需要从一个工具中得到一点我不能从它得到的东西,这通常意味着我必须写我自己的东西。我写的每一个工具都是为我自己准备的,通常这足以做我的工作。
我编写了许多命令行工具来完成我的额外工作。与我合作的大多数Java开发人员都讨厌编写命令行Java工具的想法。必须先编译它们,然后再运行它们。使用Maven有助于实现
exec:java目标。如果没有Maven,您将编写长
javac命令进行编译,然后编写长
java命令来运行它。但是,如果您小心翼翼并坚持使用JDK中的内容编写一个小的工具来完成工作,则可以使用几年前看到的Shell技巧,让编写Java的方式更像编写Python。
一个简单的Bash / Java示例
之前,我提到我是Bash的忠实粉丝。您只需要一个Java源文件,就可以非常快速地编写有用的东西。考虑以下源文件:
[code]<span style="color:#f8f8f2"><span style="color:#eff0f9"><code><span style="color:#808080">/*bin/mkdir -p /tmp/.java/classes 2> /dev/null # Compile the program. # javac -d /tmp/.java/classes $0 # Run the compiled program only if compilation succeeds. # [[ $? -eq 0 ]] && java -cp /tmp/.java/classes $(basename ${0%.*}) "$@" exit */</span> <span style="color:#f39c12">class</span> <span style="color:#7ed07e">SimpleGreeting</span> <span style="color:#f9690e">{</span> <span style="color:#f39c12">public</span> <span style="color:#f39c12">static</span> <span style="color:#f39c12">void</span> <span style="color:#7ed07e">main</span><span style="color:#f9690e">(</span><span style="color:#f8f8f2">String</span><span style="color:#f9690e">...</span> <span style="color:#f8f8f2">args</span><span style="color:#f9690e">)</span> <span style="color:#f9690e">{</span> <span style="color:#f8f8f2">System</span><span style="color:#f9690e">.</span><span style="color:#7ed07e">out</span><span style="color:#f9690e">.</span><span style="color:#7ed07e">println</span><span style="color:#f9690e">(</span><span style="color:#f2ca27">"Hello"</span><span style="color:#f9690e">);</span> <span style="color:#f9690e">}</span> <span style="color:#f9690e">}</span> </code></span></span>
在shell中运行它很容易:
[code]<span style="color:#f8f8f2"><span style="color:#eff0f9"><code><span style="color:#f8f8f2">$ </span>bash SimpleGreeting.java Hello $ </code></span></span>
这里发生了什么?为什么这么容易?
答案在顶部的评论中。Shell脚本通常以shebang解释器指令开头。在顶部带有此注释的Java源文件在bash中运行命令。
分解解释器指令
我们很容易看到这里发生了什么:
- 在
/tmp
将输出重定向到/dev/null
该目录是否已经存在的情况下,创建一个子目录(我们不在乎错误消息)。 - 编译源文件,然后将
.class
文件写入我们刚刚创建的目标目录。 - 从刚刚写入的目录中运行
class
文件,除去源文件的后缀。但是只有在编译后才运行它。 - 退出
java
运行并返回运行代码。
以这种方式编写工具的最好之处在于,您可以更改代码并再次“运行”它,而不必担心是否需要进行编译。如果有错误,编译器会告诉您它在哪里,并且不会尝试运行您的程序。
提示
有效地开发工具意味着您应该:
- 在JDK之外使用尽可能少的依赖项(最好是没有)
- 将您的工具保持简单、简短且在一个源文件中。
- 使用从命令行运行
bash SourceFile.java <args>
。 - 避免在解释器指令中使用过多逻辑;但不必害怕使用逻辑。
取样工具
我写了一些工具,这些工具极大地帮助了我:
- 从本地Maven存储库中的JDK docs zip文件和javadoc jar文件提供javadoc
- 从密钥库中转储Base64 /原始密钥
- 从密钥库中转储私钥
- 将外部生成的密钥导入密钥库
- 检查LDAP / JDBC连接
仅使用JDK,您可以快速完成很多工作。它可能没有包括所有的电池,但是它具有您无需去专卖店就可以找到的所有电池。
致谢
我想再次感谢杰西·威尔逊
Rip.java(Jessie Wilson),他的要旨(如上所述)启发了这篇文章。他是一个聪明的家伙,喜欢快速地完成工作(显然)。
我的示例在我的Dotfiles GitHub存储库中。在Scripts目录中,您会发现我的工具以及我使用的所有其他东西。
原文链接:https://dev.to//argherna/writing-java-command-line-tools-is-cumbersome-or-is-it--p42
cunxiedian8614 原创文章 0获赞 2访问量 2万+ 关注 私信相关文章推荐
- How2j学习java-2、用命令行中编写第一个 JAVA 程序
- (原)编写JAVA工具之json自动封装成pojo
- Web_telnet 通过JAVA实现网页上面的命令行远程工具 以及对于流的理解
- 来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具
- Java命令行程序构建工具-airline
- 基于Java编写串口通信工具
- 命令行下面编译运行eclipse中编写的带有包名的java文件
- 基于java GUI编写的身份证查询小工具
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
- java 编写小工具 尝试 学习(四)
- Java性能调优工具之Linux命令行工具
- java 编写小工具 尝试 学习(七)
- java学习干货之jdbc连接与编写数据库的工具类
- Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
- 用Java Swing编写简单的测试小工具界面(源码) 分类: Java 2015-07-30 10:49 23人阅读 评论(0) 收藏
- Java编写的重命名工具
- HTML、Swing还是XML,Java客户端工具选择?(四)
- java 编写小工具 尝试 学习(二)
- java 编写小工具 尝试 学习(三)
- eclipse下载安装(Java初学者的程序编写工具)