Java:从代码获取我的项目的名称

时间:2018-10-11 07:17:58

标签: java

我正在努力实现我认为简单的事情。

假设我具有以下文件夹结构:

myProjectName/src/com/company/Class1

myProjectName/src/com/otherCompany/somePackage/Class2

我想编写一段代码,如果从Class1或Class 2调用,将仅返回 myProjectName

所以基本上,我只想获取我的Java项目的名称(而不是当前的工作目录!)

找不到任何在线内容。

我看过反射,但是没有运气。

3 个答案:

答案 0 :(得分:1)

刚刚找到它,是20年前完成的。您可以使用以下命令获取代码所在的目录:

getClass().getProtectionDomain().getCodeSource().getLocation()

它用于列出编译后的代码所在的JAR。它也适用于文件系统。使用一些基本的字符串,路径或URL juggling ,您应该能够分隔路径的正确组成部分。

还请注意,这是编译后的代码所在的位置,不一定是/ 代码所在的位置,也就是说,大部分不是项目名称-这只会在开发时工作。还请阅读GhostCat的答案!

答案 1 :(得分:1)

口语简单:没有很好的(内置)方法来实现。

看到的时候,您会看到:

myProjectName/src/com/company/Class1

只有程序包名称com.company.Class1在运行时可见。 Java语言中没有{strong>否的概念涵盖了myProjectName部分。

换句话说:该名称是 meta 信息。是的,Carlos的答案为您提供了一种访问方法,但是我仍然会认为 hack 不仅仅是解决方案。

一种更好的方法:只需创建一个类似ProjectInfo的类,或者也许创建一个带有此类信息的ComponentInfo

含义:不要依赖文件系统名称。如果您拥有属于项目/组件/单元/ ...的东西,则将该“概念”作为源代码的一部分。 ProtectionDomainCodeSource类的目的更多地是关于安全性和诸如此类的事情。它不表示元信息(例如“项目名称”)的“容器”。

答案 2 :(得分:0)

感谢所有人在评论部分!

我到目前为止(但并非100%可靠)是:

String workingDir = System.getProperty("user.dir")
int indexOfSrcFolder = workingDir .indexOf("src")

String pathToProject = workingDir.substring(0, indexOfSrc)