zoukankan      html  css  js  c++  java
  • 关于"user.dir"的认识

    最近阅读了一些tomcat源码,看到tomcat在读取jar包外配置文件,是将“user.dir”的路径作为home path文件即

    通过System.getProperty("user.dir")找到相关配置。然后自己做了一些尝试,发现在eclipse执行的时候,

    这个user.dir指向工程目录下,貌似是想要的结果,但是继续试验发现,当用于一个windows services

    来启动这个jar包的时候,发现没有按照预期的方式将日志写在jar包同目录下打印出来,

    十分困惑,后来进一步查看tomcat相关源码,注意到在commons-daemon(c++)源码中,启动jar包前,使用了SetCurrentDirectoryW(SO_STARTPATH)设定了当前exe所在的路径为当前的工作目录,这就是问题点,

    设定以后jar包内获取的"user.dir",就为当前的exe所在路径(jar包和exe放在同一个路径下)。

    查阅了一些关于"user.dir"的资料,有如下等解释:
    1. "user.dir":User's current working directory  (官方) 其实不太好理解

    2. 就是运行dos命令的那个目录:
    例如:
    C:Documents and Settingsuser>java xxx

    就是指的C:Documents and Settingsuser这个目录
    (在哪里java <yourClass> 哪里就是你的working directory.)

    3. 用户当前程序运行的路径(用户当前工作目录)

    这个有点豁然开朗的感觉,想想看,执行service的时候,其实已经有了当前的运行程序的路径,而不是exe具体执行的路径

    进过测试打印是这个路径:   C:Windows

    所以需要通过SetCurrentDirectory重新设定一下。

     

     

  • 相关阅读:
    快速排序
    常见的正则表达式验证(更新中)
    中介者模式
    RadioButtonList控件如何取得选中的值
    职责链模式
    设计模式之GOF23建造者模式
    设计模式之GOF23工厂模式02
    设计模式GOF23之工厂模式01
    多线程测试时的辅助类--CountDownLatch
    设计模式GOF23之单例模式
  • 原文地址:https://www.cnblogs.com/tyoyi/p/4269470.html
Copyright © 2011-2022 走看看