如何在cli中获取默认应用程序名称?

时间:2017-08-18 11:38:15

标签: java command-line-interface

我想创建一个在statup上显示应用程序名称的框架。定位命令行界面应用程序。

问题:如何以通用方式获取此类应用程序名称?

例如spring提供了一个属性,但默认情况下没有设置:

@Value("${spring.application.name}")
private String appname;

我不想明确设置该属性。寻找某种“默认应用程序名称”。

在Java EE容器中还有以下选项:

String myApplicationName = (String) initialContext.lookup("java:app/AppName");  

CLI个应用怎么样?我怎样才能获得某种通用的应用程序名称?

1 个答案:

答案 0 :(得分:2)

如果我正确地解释了你的问题,你可以得到的最接近的是:

  1. 查找正在运行public static void main(String [] args)方法
  2. 的班级
  3. 获取simpleName
  4. 将上述名称存储到系统属性
  5. 为了做到这一点,你有两个选择:

    • 调用Thread.currentThread().getStackTrace(),并检查其尾部元素。但是这也必须在主线程中执行,否则你将无法检索到正确的StackTraceElement;
    • 调用Thread:getAllStackTraces(),并解析整个地图以识别主线程,获取相应的值,然后选择最后一个StackTraceElement

    获得StackTraceElement后,您可以拨打StackTraceElement:getClassName(),这将返回类似

    的内容
      

    scala.tools.nsc.MainGenericRunner

    拆分字符串,将其保存到系统属性中,然后就可以了。

    希望它会对你有所帮助。