Java 中哪条路径优先?
which path is the first priority in Java?
如果 jars 的相同版本或不同版本存在于 .m2 文件夹和 java classpath,在哪个路径java first试图找到jar?哪条路径将是最高优先级?
Java,因为在 VM (java.exe
) 中将搜索 class 路径。这就是它结束的地方。 m2
是行家的东西。它可能很流行,但它不是内置的或由 VM 假定存在。
事实上,m2 目录结构不能位于 class路径本身。
想法是 Maven 和其他工具将解析依赖项,然后制作一个 class 路径,其中包含完全正确的所需依赖项(通过制作一个字符串,其中的路径指向 .m2
目录),然后使用这个精心制作的字符串作为 class 路径进行编译,或者如果您使用 mvn test
或诸如此类的东西,运行 具有此 class 的 VM (java.exe
)小路。在那些情况下,.m2
目录 中的内容在 class 路径 上。如果您只是 运行ning java 自己(java -jar yourapp.jar
,或 java -cp your:dirs com.foo.MainApp
或双击一个 jar),那么 .m2
不涉及任何内容。
您可以随时编写一个应用程序来检查:
System.out.println(SomeClass.class.getResource("SomeClass.class"));
是将打印一个字符串的代码,告诉您 class 是从哪里加载的。适用于(几乎)任何东西,甚至是 String:
System.out.println(String.class.getResource("String.class"));
因此,如果您不确定,那很容易找出来。编写一个 hello world 应用程序,为您想知道它来自哪里的类型执行此操作。
如果 jars 的相同版本或不同版本存在于 .m2 文件夹和 java classpath,在哪个路径java first试图找到jar?哪条路径将是最高优先级?
Java,因为在 VM (java.exe
) 中将搜索 class 路径。这就是它结束的地方。 m2
是行家的东西。它可能很流行,但它不是内置的或由 VM 假定存在。
事实上,m2 目录结构不能位于 class路径本身。
想法是 Maven 和其他工具将解析依赖项,然后制作一个 class 路径,其中包含完全正确的所需依赖项(通过制作一个字符串,其中的路径指向 .m2
目录),然后使用这个精心制作的字符串作为 class 路径进行编译,或者如果您使用 mvn test
或诸如此类的东西,运行 具有此 class 的 VM (java.exe
)小路。在那些情况下,.m2
目录 中的内容在 class 路径 上。如果您只是 运行ning java 自己(java -jar yourapp.jar
,或 java -cp your:dirs com.foo.MainApp
或双击一个 jar),那么 .m2
不涉及任何内容。
您可以随时编写一个应用程序来检查:
System.out.println(SomeClass.class.getResource("SomeClass.class"));
是将打印一个字符串的代码,告诉您 class 是从哪里加载的。适用于(几乎)任何东西,甚至是 String:
System.out.println(String.class.getResource("String.class"));
因此,如果您不确定,那很容易找出来。编写一个 hello world 应用程序,为您想知道它来自哪里的类型执行此操作。