Как артефакт maven связан с файлом?

Последние пару дней я экспериментировал с веб-сервисами и jboss4 и наткнулся на следующую проблему:

Я включил эту зависимость в свой pom.xml:

<dependency>
    <groupId>org.jboss</groupId>
    <artifactId>jboss-jaxws</artifactId>
    <version>4.2.2</version>
</dependency>

Как оказалось, это привело к сбою JBoss4 с сообщением об ошибке

java.lang.IllegalStateException: не удается найти метаданные конечной точки

Пока я не добавил крошечную строчку

<scope>provided</scope>

к зависимости. Теперь я понимаю, что эта проблема была вызвана тем, что JBoss4 сам приносит эту библиотеку, и что причиной этого является двойное включение одной и той же библиотеки (вероятно, 2 разных версии). Но теперь, когда я смотрю в папку JBoss lib, я вижу следующие файлы:

commons-codec.jar
commons-httpclient.jar
commons-logging.jar
concurrent.jar
endorsed
getopt.jar
jboss-common.jar
jboss-jmx.jar
jboss-system.jar
jboss-xml-binding.jar
log4j-boot.jar

Как узнать, какие банки соответствуют какому артефакту maven? Как узнать для любого из миллионов файлов в моей папке .m2/repository, к какому идентификатору группы, артефакту и номеру версии они принадлежат?


person thorwinn    schedule 24.08.2015    source источник
comment
Репозиторий maven структурирован на основе groupId/artifactId/version, что приводит к структуре папок.   -  person khmarbaise    schedule 24.08.2015


Ответы (3)


Все файлы jar, предоставленные/включенные Jboss, не связаны с maven. Они там только для того, чтобы jboss сам себя запускал. Другое приложение, которое хочет работать в контейнере, должно предоставить собственные наборы библиотек. НО, какое-то время для приложения достаточно некоторой библиотеки, предоставляемой JBoss (поскольку они будут жить на одной виртуальной машине), поэтому вам не нужно предоставлять свою собственную. Вы используете эти предоставленные библиотеки для своих целей разработки, а позже, при развертывании, вы не включаете их в свое развертывание.

Таким образом, нет никаких сведений о том, какой Jar, предоставленный JBOSS, должен относиться к какому артефакту, идентификатору группы или версии в репозиториях maven, если только не будет намека на их имена.

Например, если вы видите, что Jboss приносит с собой «commons-codec.jar». Неизвестно, из какого артефакта, идентификатора группы или версии в Maven исходит банка. Вы можете догадаться, что "commons-codec" должно быть именем какого-то артефакта. Такие сайты, как http://mvnrepository.com/, помогут вам найти связанные артефакты maven, которые могут относиться к вашей банке. расследование.

person Ferdinand Neman    schedule 24.08.2015

Имя артефакта всегда ${artifactId}-${version}.${type} в вашем случае: jboss-jaxws-4.2.2.jar.

Вы просто ищете ее в плохом месте, папка lib, о которой вы говорите, должна быть одной из унифицированных загрузчиков классов, библиотека, которую вы ищете, должна быть загружена загрузчиком классов сервера, то есть она должна находиться в JBOSS_HOME/modules

[edit] Фердинанд Неман прав, когда говорит, что jboss не имеет отношения к maven. Объявление зависимостей в pom просто позволяет maven собрать и упаковать ваш проект. Поведение во время выполнения зависит от вашей целевой среды, единственное, что нужно убедиться, это то, что ваши зависимости должны быть разрешены во время загрузки классов, потому что они упакованы с вашим проектом или предоставлены средой выполнения.

В любом случае jar jboss-jaxws-4.2.2.jar должен присутствовать на вашей рабочей станции (в локальном репозитории maven), чтобы разрешить привязку классов во время компиляции maven, поскольку jar помечен как при условии, что он не будет включен в результирующую сборку артефакт.

person Gab    schedule 24.08.2015
comment
В моем каталоге JBoss нет модулей папок, однако я думаю, что вы правы, поскольку есть папка клиента, содержащая файл jboss-jaxws.jar. Я смотрю в правильном месте сейчас? - person thorwinn; 24.08.2015
comment
Ну, я не знаю, jboss-4 «подсистема osgi», вероятно, появилась в более поздних версиях. - person Gab; 24.08.2015
comment
Благодарю вас! Ваш ответ также очень полезен: я уверен, что знание имени любого артефакта, созданного с помощью maven, будет очень полезно в будущем! - person thorwinn; 24.08.2015

Может быть, вы найдете полезной эту команду maven

mvn dependency:tree -Dverbose

Он показывает вам зависимости jar, классифицированные по групповым артефактам, а также представляет зависимости между ними в виде дерева.

person malaguna    schedule 24.08.2015