- Предположим, что есть 2 артефакта maven (локальный) с тем же groupId, но с другим artifactId.
- Различные artifactId должны сделать каждый артефакт maven уникальным.
- Однако, если оба из уникальных артефактов имеют класс с тем же именем. этот класс не будет уникальным, потому что, когда он импортируется в java, он будет использовать формат groupId.className. и ни groupId, ни className не являются уникальными (в обсуждаемом случае).
- Это приведет к проблеме двусмысленности в определении того, какой класс использовать.
- После тестирования кажется, что будет использоваться зависимость, объявленная первым в файле pom.xml.
Вопрос лиУникальность artifactId in maven
- Что является лучшей практикой решения/избежать этой проблемы?
- Почему артефактная координата maven вносит вклад в уникальность артефакта maven в репозитории, но не внутри java-кода?
Пример кода: Maven - Same Class Name Same GroupId Different ArtifactId
- Проект1 является первым артефактом.
- Project2 - второй артефакт.
- «Project User» - это артефакт/проект, который будет зависеть как от Project1 & Project2.
- Project1 & Project2 оба имеют класс с именем
Utilities
. - Класс
Utilities
имеет статический методpublic static String getDescription()
, который возвращаетstring
, содержащий координаты артефакта текущего проекта, а также название проекта. Utilities.getDescription()
вызываетString
, чтобы увидеть, произойдет ли ошибка где-нибудь, и посмотреть, как он будет разрешен.- Результат зависит от того, какая зависимость была объявлена сначала в файле pom.xml артефакта «Project User».
Отредактировано: Развейте Вопрос
- Есть ли архетип, который будет создан пакет Java, используя как артефакта и GroupID вместо того, чтобы делать это вручную каждый раз ?
имя класс не имеет ничего общего с артефактом или идентификатор_группы – Jens
классами Java доступны как 'com.mypackage. MyClass 'не' groupId.MyClass'. Наверное, у вас есть два артефакта, которые имеют одинаковые пакеты и один и тот же класс. – NewUser
Имя пакета должно быть уникальным. Например, вы должны использовать контролируемый домен или какой-либо уникальный псевдоним или что-то еще, а затем имя проекта. – xenteros