как jvm загружает разные jar-файлы, но с одинаковыми именами пакетов и классов? - PullRequest
0 голосов
/ 07 марта 2019

Я озадачен из-за двух одинаковых классов в разных банках, но проект демонстрирует разное поведение. такие как ниже:

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 print test1, когда pom первый импорт test2, jar pirint test2)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...