关于"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 Settings\user>java xxx

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

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

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

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

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

 

 

 

 

 

 

posted on   Tyoyi  阅读(7159)  评论(1编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示