Java命令行选项解析之Commons-CLI & Args4J & JCommander

http://rensanning.iteye.com/blog/2161201

JCommander star1000+

This is an annotation based parameter parsing framework for Java 8.

Here is a quick example:

public class JCommanderTest {
@Parameter
public List<String> parameters = Lists.newArrayList(); @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity")
public Integer verbose = 1; @Parameter(names = "-groups", description = "Comma-separated list of group names to be run")
public String groups; @Parameter(names = "-debug", description = "Debug mode")
public boolean debug = false; @DynamicParameter(names = "-D", description = "Dynamic parameters go here")
public Map<String, String> dynamicParams = new HashMap<String, String>(); }

and how you use it:

JCommanderTest jct = new JCommanderTest();
String[] argv = { "-log", "2", "-groups", "unit1,unit2,unit3",
"-debug", "-Doption=value", "a", "b", "c" };
JCommander.newBuilder()
.addObject(jct)
.build()
.parse(argv); Assert.assertEquals(2, jct.verbose.intValue());
Assert.assertEquals("unit1,unit2,unit3", jct.groups);
Assert.assertEquals(true, jct.debug);
Assert.assertEquals("value", jct.dynamicParams.get("option"));
Assert.assertEquals(Arrays.asList("a", "b", "c"), jct.parameters);

The full doc is available at http://jcommander.org.

Java port of Python's famous argparse command-line argument parser. https://argparse4j.github.io/

Argparse4j is a command line argument parser library for Java based on Python's argparse module.

Argparse4j is available in Maven central repository:

<dependency>
<groupId>net.sourceforge.argparse4j</groupId>
<artifactId>argparse4j</artifactId>
<version>0.8.0</version>
</dependency>
 https://github.com/argparse4j/argparse4j

https://github.com/jankroken/commandline

The Apache Commons CLI library provides an API for parsing command line options passed to programs. It's also able to print help messages detailing the options available for a command line tool.

Commons CLI supports different types of options:

http://commons.apache.org/proper/commons-cli/

https://stackoverflow.com/questions/11704338/java-cli-commandlineparser

https://github.com/jatoben/CommandLine

Mirror of Apache Commons CLI

https://github.com/apache/commons-cli

CLI Parser is a tiny (10k jar), super easy to use library for parsing various kinds of command line arguments or property lists. Using annotations on your fields or JavaBean properties you can specify what configuration is available. Here is an example:

public class Loader {

  @Argument
private static Boolean hdfs = false; @Argument(alias = "r", description = "Regular expression to parse lines", required = true)
private static String regex; @Argument(alias = "k", description = "Key column", required = true)
private static String key; @Argument(alias = "p", description = "Key prefix")
private static String prefix; @Argument(alias = "c", description = "Column groups", delimiter = ",")
private static String[] columns; @Argument(alias = "n", description = "Column names", delimiter = ",")
private static String[] names; @Argument(alias = "h", description = "Redis host")
private static String host = "localhost"; @Argument(alias = "p", description = "Redis port")
private static Integer port = 6379; public static void main(String[] args) throws IOException {
// unparsed will contain all unparsed arguments to the command line
List<String> unparsed = Args.parseOrExit(Loader.class, args);
// Loader's fields will be populated after this line or the program will exit with usage
}
}

In this case we are configuring static fields, but you can also use the same system with instances. If you pass in a wrong command line argument you will get the usage message:

Usage: com.sampullara.cli.Example
-hdfs [flag]
-regex (-r) [String] Regular expression to parse lines
-key (-k) [String] Key column
-prefix (-p) [String] Key prefix
-columns (-c) [String[,]] Column groups
-names (-n) [String[,]] Column names
-host (-h) [String] Redis host (localhost)
-port (-p) [Integer] Redis port (6379)

That message will print out the names and aliases of the arguments, type, description and a default value for the parameter if there is one. You can add it to your code with:

<dependency>
<groupId>com.github.spullara.cli-parser</groupId>
<artifactId>cli-parser</artifactId>
<version>1.1</version>
</dependency>

https://github.com/spullara/cli-parser

KeyStore Explorer is a free GUI replacement for the Java command-line utilities keytool and jarsigner.

Official website: http://keystore-explorer.org/

Features:

  • Create, load, save and convert between various KeyStore types: JKS, JCEKS, PKCS#12, BKS (V1 and V2) and UBER
  • Change KeyStore and KeyStore entry passwords
  • Delete or rename KeyStore entries
  • Cut/copy/paste KeyStore entries
  • Append certificates to key pair certificate chains
  • Generate RSA, ECC and DSA key pairs with self-signed X.509 certificates
  • Apply X.509 certificate extensions to generated key pairs and Certificate Signing Requests (CSRs)
  • View X.509 Certificate, CRL and CRL entry X.509 V3 extensions
  • Import and export keys and certificates in many formats: PKCS#12, PKCS#8, PKCS#7, DER/PEM X.509 certificate files, Microsoft PVK, SPC, PKI Path, OpenSSL
  • Generate, view and sign CSRs in PKCS #10 and SPKAC formats
  • Sign JAR files
  • Configure a CA Certs KeyStore for use with KeyStore operations

https://github.com/kaikramer/keystore-explorer

Library Usage:

  1. Drop the jar into your lib folder and add to build path.
  2. Choose the converter of your choice, they are named DocToPDFConverter, DocxToPDFConverter, PptToPDFConverter, PptxToPDFConverter and OdtToPDFConverter.
  3. Instantiate with 4 parameters
    • InputStream inStream: Document source stream to be converted
    • OutputStream outStream: Document output stream
    • boolean showMessages: Whether to show intermediate processing messages to Standard Out (stdout)
    • boolean closeStreamsWhenComplete: Whether to close input and output streams when complete
  4. Call the "convert()" method and wait.

Caveats and technical details:

This tool relies on Apache POI, xdocreport, docx4j and odfdom libraries. They are not 100% reliable and the output format may not always be what you desire.

DOC:

Generally ok but takes some time to convert.. I notice that after conversion, the paragraph spacing tends to increase affecting your page layout. Conversion is done using docx4j to convert DOC to DOCX then to PDF.(Cannot use xdocreport once the DOCX data is obtained as the intermediate data structure is docx4j specific.)

DOCX:

Very good results. Fast conversion too. Conversion is done using xdocreport library as it seems faster and more accurate than docx4j.

PPT and PPTX:

Resulting file is a PDF comprising of a PNG embedded in each page. Should be good enough for printing. This is the limitation of the Apache POI and docx4j libraries.

ODT:

Quality and speed as good as DOCX. Conversion is done using odfdom of the Apache ODF Toolkit.

Main Libraries

Apache POI: https://poi.apache.org/
xdocreport: http://code.google.com/p/xdocreport/
docx4j: http://www.docx4java.org/
odfdom: https://incubator.apache.org/odftoolkit/odfdom/

https://github.com/yeokm1/docs-to-pdf-converter

Pdf2Dom is a PDF parser that converts the documents to a HTML DOM representation. The obtained DOM tree may be then serialized to a HTML file or further processed. A command-line utility for converting the PDF documents to HTML is included in the distribution package. Pdf2Dom may be also used as an independent Java library with a standard DOM i…http://cssbox.sourceforge.net/pdf2dom/

Pdf2Dom is based on the Apache PDFBox™ library.

https://github.com/radkovo/Pdf2Dom

About

Generate scaffold with spring boot.

Generate CRUD basic with spring boot.

Scaffold for java web, a clean generate with simple classes.

https://github.com/NetoDevel/cli-spring-boot-scaffold

An annotation based command line parser的更多相关文章

  1. logoff remote desktop sessions via command line tools

    This trick I learned from my one of ex-college.  In Windows servers, only two remote desktop session ...

  2. 15 Examples To Master Linux Command Line History

    When you are using Linux command line frequently, using the history effectively can be a major produ ...

  3. atprogram.exe : Atmel Studio Command Line Interface

    C:\Program Files\Atmel\Atmel Studio 6.1\atbackend\atprogram.exe No command specified.Atmel Studio Co ...

  4. Building QT projects from the command line

    /************************************************************************ * Building QT projects fro ...

  5. [笔记]The Linux command line

    Notes on The Linux Command Line (by W. E. Shotts Jr.) edited by Gopher 感觉博客园是不是搞了什么CSS在里头--在博客园显示效果挺 ...

  6. Linux Command Line learning

    https://www.codecademy.com/en/courses/learn-the-command-line Background The command line is a text i ...

  7. MAC OS 如何安装命令行工具:Command Line Tools

    打开终端输入:xcode-select --install 回车 安装好了测试结果:gcc -v 显示如下: xcode-select: note: install requested for com ...

  8. Xcode 8.X Command Line Tools

    Summary Step 1. Upgrade Your System to macOS Sierra Step 2. Open the Terminal Application Step 3. Is ...

  9. Creating Node.js Command Line Utilities to Improve Your Workflow

    转自:https://developer.telerik.com/featured/creating-node-js-command-line-utilities-improve-workflow/ ...

随机推荐

  1. MDX的实例讲解(排名前15的小例子)

    MDX语句的特点: 大小写不分.members等于Members;downloads等于Downloads 维度的统计量指定要选择准确.downloads等于[Downloads] []可以少,不能多 ...

  2. Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...

  3. iOS多线程篇:NSThread简单介绍和使用

    一.什么是NSThread NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程, 需要手动管理线程的生命周期,处理线程同 ...

  4. Xcode and #pragma mark

    原帖地址:http://macdevelopertips.com/xcode/xcode-and-pragma-mark.html I've started using #pragma mark di ...

  5. 和菜鸟一起学linux之dlna的学习记录

    关于DLNA框架 1.Networking & Connectivity 为了解决物理设备连通问题, 主要依赖于Ethernet,802.11,Ipv4协议栈,Ipv6协议栈. TCP/IP协 ...

  6. obj-c编程10:Foundation库中类的使用(5)[时间对象]

    隔了好久才有了这新的一篇,还是无奈的时间啊!so这次我们就着重谈谈它喽. F库中有很多时间相关的类,比如NSDate,NSTimeInterval,NSTimeZone,NSDateComponent ...

  7. webpack安装使用

    一.安装 1.安装node.js,Webpack 需要 Node.js v0.6 以上支持 2.使用npm(软件包管理 )安装webpack (1)全局安装    npm install webpac ...

  8. SignUtil

    最近接的新项目 加密比较多  我就记录下. SignUtil是jnewsdk-mer-1.0.0.jar  com.jnewsdk.util中的一个工具类.由于我没有百度到对应的信息.所以我只能看源码 ...

  9. java接受安卓及ios App上传的图片,并保存到阿里OSS

    做后台的时候,写了两个方法,分别用来获取安卓和苹果IOS端上传的头像,保存到阿里云OSS图片存储服务器上.(SMM框架) 安卓及H5版本: /** * 上传用户头像 */ @RequestMappin ...

  10. SSRS 数据源访问Cube 无法创建订阅的解决方法

    SSRS Report 的数据源可以直接放问SSAS 的Cube. 当报表的数据源设置成下图: 这样设置后,report 能够正常访问 Cube 并打开Report. 但是,如果我们需要添加数据驱动的 ...