我爲使用Reflections.jar的第一次,所以我想知道以下有人可以幫助我知道org.reflections.Reflections罐子JDK版本的兼容性
- 對此有任何版本的兼容性罐(如上面JDK6(或)高達jdk8)
- 雖然加載類是有負載的任何命令(如罐子的字母順序(或)順序放置在類路徑)
我爲使用Reflections.jar的第一次,所以我想知道以下有人可以幫助我知道org.reflections.Reflections罐子JDK版本的兼容性
如果你在談論這個https://github.com/ronmamo/reflections項目,然後就發現他們出現在你的classpath像Java啓動會做的順序的類。在這裏描述如何找到和加載課程的方式https://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html。
中相匹配的完整的類名加載類路徑順序的第一個類文件。查找下面的小片段進行演示。
承擔下列目錄和文件
lib/annotations-2.0.1.jar
lib/guava-15.0.jar
lib/javassist-3.18.2-GA.jar
lib/reflections-0.9.9.jar
src/DummyInterface.java
src/Main.java
src1/DummyClass1.java
src2/DummyClass1.java
的src/DummyInterface.java
package sub.optimal;
public interface DummyInterface {}
的src/Main.java
import org.reflections.Reflections;
import sub.optimal.DummyInterface;
public class Main {
public static void main(String[] args) throws Exception {
Reflections reflections = new Reflections("sub.optimal");
for (Class c : reflections.getSubTypesOf(DummyInterface.class)) {
System.out.println("class: " + c.getCanonicalName());
c.newInstance();
}
}
}
SRC1/DummyClass1.java
package sub.optimal;
public class DummyClass1 implements DummyInterface {
static {
System.out.println("touched DummyClass 1");
}
}
SRC2/DummyClass1.java
package sub.optimal;
public class DummyClass1 implements DummyInterface {
static {
System.out.println("touched DummyClass 2");
}
}
首先編譯的類,在演示中,我們在不同的位置創建的類文件
javac -cp lib/* -d bin/ src/DummyInterface.java src/Main.java
javac -cp bin/:lib/* -d bin1/ src1/DummyClass1.java
javac -cp bin/:lib/* -d bin2/ src2/DummyClass1.java
在類執行Main
與bin1/
bin2/
前路徑將找到並加載DummyClass1
在bin1/
java -cp bin/:bin1/:bin2/:lib/* Main
輸出
class: sub.optimal.DummyClass1
touched DummyClass 1
在類路徑與bin2/
執行Main
bin1/
之前將找到並加載DummyClass1
在bin2/
java -cp bin/:bin2/:bin1/:lib/* Main
輸出
class: sub.optimal.DummyClass1
touched DummyClass 2
謝謝,很明顯,我明白了:) ... – sera
有什麼方法可以改變這種行爲。例如,我有罐子說'A.jar類Z.class,Y.class ....和B.jar - 類F.class,G.class ** ** Z.class依賴於F.class **我已經在classpath中設置了這些jar包含Z.jar; Y.jar; ,如果是這種情況,班級將如何加載?如果要加載第一個Y.class,然後加載G.class,有沒有辦法做到這一點? - 預先感謝:) – sera
@sera如果'A.jar'(並且類路徑中沒有任何其他JAR文件)不包含'F.class',那麼'A.jar'和'B .jar'無所謂。如果'A.jar'和'B.jar'包含一個'F.class'並且你希望''''''''''''''''''''''''''''''''''''''''' '在班級路徑中。 – SubOptimal
1)根據https://github.com/ronmamo/reflections/blob/master/pom.xml,它是用java 1.7編譯的,所以它與java版本兼容N> = 1.7
2)http://javarevisited.blogspot.ru/2012/07/when-class-loading-initialization-java-example.html
類是裝上需要的基礎。有關如何找到某個類的信息,可以查看https:// docs。oracle.com/javase/8/docs/technotes/tools/findingclasses.html – SubOptimal
感謝您的回覆... https://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html在此作者非常普遍地解釋,但我的疑問是** Reflections **中是否有任何特定的類加載,如果是,那是什麼 – sera