Я боролся с этой ошибкой только потому, что один из моих class library
проектов was set acceddentaly
был консольным приложением
, поэтому убедитесь, что ваши проекты библиотеки классов являются библиотекой классов в типе Output
Я не уверен, что это ответит на ваш вопрос, поэтому я сделаю все возможное:
package de.xyz;
class PathForClass {
public static void main( String [] args ) {
System.out.println(
PathForClass.class.getResource( "PathForClass.class" )
);
}
}
Что при компиляции и запуске дает:
C:\Users\Oscar\code>javac -d . PathForClass.java
C:\Users\Oscar\code>java -cp . de.xyz.PathForClass
file:/C:/Users/Oscar/code/de/xyz/PathForClass.class
Таким образом, вы можете немного изменить вызовы и укажите путь по своему усмотрению:
package de.xyz;
class PathForClass {
public static void main( String [] args ) {
String currentDir = new java.io.File(".").toURI().toString();
String pathToClass = PathForClass.class.getResource( "PathForClass.class" ).toString();
System.out.println( pathToClass.substring( currentDir.length() - 2 )); // -2 to get rid of the /./ at the end of the current dir
}
}
C:\Users\Oscar\code>java -cp . de.xyz.PathForClass
de/xyz/PathForClass.class
Имейте в виду, что это будет работать только тогда, когда классы хранятся в каталогах, для jar-файлов вам придется немного изменить его ( if (pathToClass.startsWith (" jar ")) {//etc………………………………………………………………………………………………………………………………………………………………………………………. что для
de.xyz.MyClass
существует файл de / xyz / MyClass.class
(как показано в примере jar)
Надеюсь, вы сочтете это полезным.
Вот так:
String path = MyClass.class.getName().replace(".", "/") + ".java";
Но обратите внимание, что иногда имена классов аннотируются (например, внутренние классы и т. Д.). Подробнее здесь .
Если вы начинаете с экземпляра класса (возможно, this
внутри одного из методов класса), вы можете получить класс через instance .getClass ()
. Например:
private String getPathToThis() {
return this.getClass().getName().replace(".", "/") + ".java";
}
Конечно, они будут относиться к некоторой базе (каталогу или банке) в пути к классам ...