当前位置: 首页 > news >正文

网站页面效果图怎么做的新媒体营销的概念是什么

网站页面效果图怎么做的,新媒体营销的概念是什么,滨州建设局网站,苏州市市政建设集团公司网站文章目录 需求Java命令行工具库依赖库定义各个子命令主类CLI测试一下参考文档 需求 最近想将自己的一个Java应用包装成命令行工具,看了几个库,最后选取了JCommander,结合AutoService库,实现了带子命令的工具,方便扩展…

文章目录

    • 需求
    • Java命令行工具库
    • 依赖库
    • 定义各个子命令
    • 主类CLI
    • 测试一下
    • 参考文档

需求

最近想将自己的一个Java应用包装成命令行工具,看了几个库,最后选取了JCommander,结合AutoService库,实现了带子命令的工具,方便扩展新的子命令。

子命令放在同一包下,实现相同的接口,通过java.util.ServiceLocator加载。

Java命令行工具库

常用的几个库为:

  • JCommander
    项目地址: https://github.com/cbeust/jcommander
    Star: 1010 Fork: 227
    文档地址: http://jcommander.org/

  • picocli
    地址: https://github.com/remkop/picocli
    Star: 336, Fork: 32
    示例:https://github.com/kakawait/picocli-spring-boot-starter

  • Commons CLI
    地址: https://commons.apache.org/proper/commons-cli/
    地址: 来自apache common的开源项目
    更新: 最后一次更新是1.5-SNAPSHOT,是在2017年6月8日

  • Args4j
    项目地址: https://0github.com/kohsuke/args4j
    Star: 570 Fork: 151
    文档地址: http://args4j.kohsuke.org/sample.html
    活跃程度: 最后一次更新为2年之前

依赖库

        <!-- https://mvnrepository.com/artifact/com.google.auto.service/auto-service --><dependency><groupId>com.google.auto.service</groupId><artifactId>auto-service</artifactId><version>1.1.1</version></dependency><!-- https://mvnrepository.com/artifact/com.beust/jcommander --><dependency><groupId>com.beust</groupId><artifactId>jcommander</artifactId><version>1.82</version></dependency>

定义各个子命令

Create子命令:

@AutoService(Command.class)
@Parameters(commandNames = { CREATE_CMD },commandDescription = "create a new ebook."
)
@Getter
public class CreateCommand implements Command{@Parameter(names = { "--indexUrl", "-u" })public String indexUrl;@Overridepublic void execute() throws CommandException {System.out.println("create a new book from " + indexUrl);}
}

Fetch子命令:

@AutoService(Command.class)
@Parameters(commandNames = {FETCH_CMD},commandDescription = "fetch some articles from website."
)
@Getter
public class FetchCommand implements Command {@Parameter(names = {"--indexUrl", "-u"})public String indexUrl;@Overridepublic void execute() throws CommandException {System.out.println("fetch articles from " + indexUrl);}
}

都实现了接口Command:

public interface Command {default Collection<Command> commands() {return null;}void execute() throws CommandException;
}

注意,子命令支持嵌套的子命令。当然一般用不到。

主类CLI

public class CLI {static final String CREATE_CMD = "create";static final String FETCH_CMD = "fetch";@Parameter(names = { "-h", "--help" }, help = true)private boolean help;public void exec(String[] args) {final JCommander.Builder builder = JCommander.newBuilder().addObject(new CLI());       final JCommander jCommander = builder.build();ServiceLoader.load(Command.class).forEach(command -> CLI.registerCommand(jCommander, command));JCommander leafCommander = jCommander;try {jCommander.parse(args);final String rootVerb = jCommander.getParsedCommand();final JCommander rootCommander = jCommander.getCommands().get(rootVerb);if (rootCommander == null) {jCommander.usage();System.exit(1);}leafCommander = rootCommander;do {final String subVerb = leafCommander.getParsedCommand();final JCommander subCommander = leafCommander.getCommands().get(subVerb);if (subCommander != null)leafCommander = subCommander;elsebreak;} while (true);final Command command = (Command) leafCommander.getObjects().get(0);command.execute();} catch (final CommandException e) {System.err.printf("%1$s: %2$s. See '%1$s --help'.%n", leafCommander.getProgramName(), e.getMessage());System.exit(e.getStatus());} catch (final Exception e) {System.err.printf("%1$s: %2$s. See '%1$s --help'.%n", leafCommander.getProgramName(), e.getMessage());System.exit(1);}}private static final void registerCommand(final JCommander jCommander, final Command command) {jCommander.addCommand(command);final Parameters commandParameters = command.getClass().getAnnotation(Parameters.class);if (commandParameters == null || commandParameters.commandNames().length == 0)return;final JCommander subCommander = jCommander.getCommands().get(commandParameters.commandNames()[0]);final Collection<Command> subCommands = command.commands();if (subCommands != null)subCommands.forEach(subCommand -> CLI.registerCommand(subCommander, subCommand));}public static void main(final String[] args) {CLI cli = new CLI();cli.exec(args);}
}

原理很简单:ServiceLocator加载了所有Command的实现类,然后根据子命令调用相应的Command类。AutoService的好处就是不必自己去创建META-INF/services下的相关文件。

测试一下

    @Testpublic void testCreateCommand() {CLI cli = new CLI();String[] argv = { "create",  "-u", "http://www.sina.com.cn"};cli.exec(argv);}@Testpublic void testFetchCommand() {CLI cli = new CLI();String[] argv = { "fetch",  "-u", "http://www.csdn.cn"};cli.exec(argv);}

参考文档

  • https://gist.github.com/mkarg/9d9ca23e6da32b47c7fadaf10ae16ba6
  • https://pedrorijo.com/blog/java-service-loader/
http://www.yayakq.cn/news/268250/

相关文章:

  • 多语言网站怎么实现网站开发php岗位职责
  • 苏州互联网企业排名湛江市企业网站seo点击软件
  • 做网站布为网珠海公司注册
  • wordpress服务器加速谷歌seo算法规则
  • 五莲县城乡建设局网站首页wordpress分类规则
  • 网站建设系统规划上海网站建设公司网站
  • 上海网站开发与wordpress模板最新
  • 微网站建设制作管理咨询公司简介
  • 北京南站在哪个区哪个街道网站重新备案怎么做
  • 南宁好的网站建设公司东莞建筑公司前十强
  • 唐山网站建设公司哪家好宁波网站建设推荐荣盛网络好
  • 长沙网站制作培训深圳软件系统开发公司
  • 廊坊做网站的企业哪家好微信网站建设收费标准
  • 成都网站建设收费明细河北建设厅网站电话
  • 做网站字体大小传奇网页游戏排行
  • 关于加强公司 网站建设的通知用c语言怎么做网站
  • 做网站续费地方门户网站备案
  • 成都网站建设哪家好网站二级页面模板
  • 做网站东莞东莞建网站免费注册tk域名
  • 订货网站建设电子政务网站代码
  • 网站开发流程规范宁波网站建设公司哪家好
  • 网站第一关键词怎么做网站建设怎么分好坏
  • 泉州建站公司模板5m带宽做视频网站
  • 营销方案效果评估范文四川seo
  • 几级英语可以做外贸网站seo好看的wordpress主题
  • 企业网站收录只有图文的网站如何做
  • 别人能打开的网站我打不开网页设计师月薪
  • 网页建站怎么设置网建平台
  • 知晓程序网站怎么做全国信用信息公示系统
  • 网站建设免费域名行业网站建设报价