Я озадачен из-за двух одинаковых классов в разных банках, но проект демонстрирует разное поведение. такие как ниже:
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)?