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

Java:从代码中获取我的项目名称,java,Java,我正在努力实现我认为很简单的事情 假设我有以下文件夹结构: myProjectName/src/com/company/Class1 myProjectName/src/com/otherCompany/somePackage/Class2 我想写一段代码,如果从Class1或Class2调用,它将只返回myProjectName 所以基本上我只想得到我的Java项目的名称(不是当前的工作目录!) 在网上找不到任何东西 我看了《反思》,但运气不好。谢谢评论区的所有人 到目前为止,我所掌握的(

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

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

myProjectName/src/com/company/Class1

myProjectName/src/com/otherCompany/somePackage/Class2
我想写一段代码,如果从Class1或Class2调用,它将只返回
myProjectName

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

在网上找不到任何东西


我看了《反思》,但运气不好。

谢谢评论区的所有人

到目前为止,我所掌握的(但不是100%可靠)是:


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

getClass().getProtectionDomain().getCodeSource().getLocation()
这用于列出编译代码所在的JAR。它也应该适用于文件系统。通过一些基本的字符串、路径或URL杂耍,您应该能够分离路径的正确组件


还请注意,这是编译代码所在的位置,不一定是源代码所在的位置,也就是说,大多数情况下不是项目名称-这只在开发时起作用。请同时阅读幽灵猫的答案

简单地说:没有好的(内置的)方法来实现这一点

你看,当你看到:

myProjectName/src/com/company/Class1
运行时,只有名称com.company.Class1可见。Java语言中绝对没有涵盖
myProjectName
部分的概念

换句话说:这个名字就是元信息。是的,卡洛斯的答案为您提供了一种访问它的方法,但我仍然认为比解决方案更多的是<强> HAK/St>。p> 更好的方法是:只需创建一个类,比如
ProjectInfo
,或者可以创建一个
ComponentInfo
来携带这些信息


含义:不要依赖文件系统名称。如果你有属于某个项目/组件/单元/的东西。。。然后将“概念”作为源代码的一部分。
ProtectionDomain
CodeSource
类的目的更多地是关于安全性和诸如此类的东西。它不是“项目名称”等元信息的“容器”。

您查看过吗?虽然没有运气,但您可以获取.class文件所在的目录,但在执行时无法找到源文件所在的位置(据我所知)。源文件中的文件夹名是任意的,最终只是IDE在编译时的问题。要查找目录,我相信您可以使用
类加载器
,我已经添加到您查看反射的问题中。在这里,努力的表现很重要——人们希望看到你努力了。您可以进一步查看它,并显示您在使用反射时尝试的实际代码。@GeorgeCimpoies也可能在某种程度上使用类路径(请参见
System.getProperties()
)-但并不真正可靠。我还记得使用
ProtectionDomain
获取源代码的JAR文件
getClass().getProtectionDomain().getCodeSource()
-好的,在某种程度上使用reflectionit可以产生与System.getProperty(“user.dir”)大致相同的输出,后者是当前工作目录。我仍然需要使用诸如子字符串之类的黑客来获得项目名称。这些黑客是显而易见的。“user.dir”是实际的工作目录,应用程序是从那里启动的,而不是我的答案中所写的代码的确切位置:我不同意如何使用源代码路径名来识别意义单位的总体想法,但仍然支持你的答案,因为它明确指出了JVM的一些有趣的方面,这对许多人来说可能是未知的@GhostCat我实际上添加了一个关于这一点的注释,您的回答请参见对我的回答的评论,“user.dir”不是正确的属性。您需要了解,项目结构不是Java约定的一部分。它可能来自日食世界。这就是为什么你找不到任何直接解决问题的方法。你必须自己动手解决这个问题。找到上面的工作目录后,可以执行以下字符串workingDir=System.getProperty(“user.dir”);System.out.println(workingDir.substring(workingDir.lastIndexOf(“\\”)+1,workingDir.length());这将至少在windows上打印确切的项目名称。
myProjectName/src/com/company/Class1