Maven вопросы зависимости - PullRequest
0 голосов
/ 07 октября 2009

Итак, я наконец-то взял погружение и установил maven2, но у меня возникли некоторые проблемы.

Мой код опирается на некоторые сторонние jar-файлы, которые я установил с помощью install: install-file. Затем я перечислил эти банки как зависимости в моем pom. Maven может скомпилировать и упаковать все отлично и денди. Но когда я запускаю свою банку так:

java -cp "target / *" com.blah.App

Он не работает, потому что не может найти некоторые классы, которые необходимы во время выполнения. Эти классы находятся в jar, который был установлен и используется для компиляции.

Я указал область зависимости для этой банки как «предоставленную». Я тоже пытался использовать «систему», но это тоже не работает. Что я делаю не так?

Я могу заставить его работать, если я сделаю это, хотя:

java -cp "target / *: путь / к / jar1: путь / к / jar2" com.blah.App

Но должен быть какой-то способ заставить maven поместить необходимые jar-файлы в целевой каталог.

Ответы [ 2 ]

3 голосов
/ 07 октября 2009

Вы не должны использовать «предоставлено» для нормальных зависимостей. «Предоставлено» используется для зависимостей, которые предположительно будут доступны во время выполнения, таких как API J2EE для приложения J2EE.

Причина, по которой ваше приложение не работает, заключается в том, что теперь ваши зависимости находятся в репозитории Maven, и их необходимо добавить в путь к классам.

Для обычного Java-приложения, такого как ваше, вы можете использовать maven-dependency-plugin , чтобы скопировать ваши зависимости в каталог (из хранилища maven) и настроить maven-jar- плагин для добавления файлов jar в ваш путь к классам манифеста (путем создания исполняемого файла jar).

Обновление: Вы также можете поискать в центральном репозитории maven, чтобы увидеть, есть ли ваши зависимости, поэтому вам не придется возиться с ручной установкой их в локальное хранилище. Есть большая вероятность, что они уже там (если они с открытым исходным кодом).

2 голосов
/ 07 октября 2009

Чтобы узнать больше о том, как maven справляется с зависимостями, хорошая начальная точка - раздел Введение в механизм зависимостей и Область зависимостей . Здесь, как указано в другом ответе, использование «предоставленной» области действия для ваших зависимостей не подходит. Вы должны использовать область компиляции, которая используется по умолчанию и используется, если она не указана.

Затем для запуска com.blah.App в текущей виртуальной машине с зависимостями включающего проекта в качестве classpath существует maven-exec-plugin :

mvn exec:java -Dexec.mainClass="com.blah.App"

Как видите, maven может упростить задачу, если вы правильно его используете и maven.

...