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 应用程序,为您想知道它来自哪里的类型执行此操作。