jvm如何加载不同的jar,但包名和类名相同?

时间:2019-03-07 03:09:22

标签: java jvm

  

我对两个相同的类放在不同的罐子中感到困惑,但是项目显示出不同的行为。如下所示:

jar:test1.jar类:cn.oom.test.HelloTests

  public class HelloTests {
   /**
    * greet
    *
    * @return
    */
   public static String greet(String greet) {
       System.out.println("test1 " + greet);
       return "test1" + greet;
   }
}

jar:test2.jar类:cn.oom.test.HelloTests

 public class HelloTests {
   /**
    * greet
    *
    * @return
    */
   public static String greet(String greet) {
       System.out.println("test2 " + greet);
       return "test2" + greet;
   }
}
  

在我的项目(一个springboot项目)中:atest,我添加了

之类的依赖项
<dependency>
            <groupId>cn.oom.test1</groupId>
            <artifactId>test1</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>cn.oom.test2</groupId>
            <artifactId>test2</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

然后像

一样测试类
@Component
public class ATests implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        HelloTests.greet("hello");
        //
    }
}

它显示:

  

test1你好

当像

这样的依赖项导入时
<dependency>
            <groupId>cn.oom.test2</groupId>
            <artifactId>test2</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>cn.oom.test1</groupId>
            <artifactId>test1</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

相同的代码显示:

  

test2你好

我感到困惑的是什么:当我将项目打包为jar文件时,请使用java -jar atest.jar 项目始终显示

  

test2你好


  • 为什么会这样?
  • jvm是否按文件名从类路径顺序加载jar?
  • 为什么jar项目显示与依赖项导入顺序相同?(当pom时) 首先导入test1,jar打印test1,当pom首次导入test2时,jar pirint test2)?

0 个答案:

没有答案