2015-06-27 5 views
0

Когда я бегуКак добавить зависимость jar в maven?

mvn compile 

я package com.ibm.icu.util does not exist. Поэтому я загрузил банку ICU4J и установил ее в локальный репозиторий. Я подтвердил, что он находится в .m2/repository/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4.jar. Внутри этого файла jar отсутствует файл класса com/ibm/icu/util/Calendar.class. Затем я добавил следующее в разделе зависимостей pom.xml:

<dependency> 
    <groupId>com.ibm.icu</groupId> 
    <artifactId>icu4j</artifactId> 
    <version>3.4.4</version> 
</dependency> 

Но когда я снова запустить mvn compile, я получаю ту же ошибку. Что я делаю не так?

+0

(1) Почему древняя версия? (2) Почему вы не решаете это из Центральной? – chrylis

+0

Вы пробовали 'mvn clean'? Или выдувание вы - каталог 'repository' и позволяющий maven перезагружать все. Вам не нужно вручную добавлять банку, безусловно, знак того, что что-то не синхронизировано. –

+0

mvn clean - вот что привело меня в эту ошибку. он работал до того, как я это сделал. Я не могу загрузить, потому что он компилируется на удаленном сервере, у которого нет подключения к Интернету. – user3217883

ответ

0

Нельзя вручную устанавливать файлы в каталог хранилища maven. Этот каталог поддерживается самим maven.

Способ работы зависимостей заключается в том, что при запуске mvn compile или какой-либо другой цели он подключится к центральному репозиторию maven и загрузит необходимые зависимости и их зависимости.

Если вы вручную установите файл jar, у него могут не быть его зависимостей. У этого артефакта icu, вероятно, будут другие вещи, от которых это зависит. Maven автоматически решит эти зависимости.

Я бы рекомендовал использовать mvn clean install, это очистит целевой каталог и перестроит все.

Если он не загружается, вам, вероятно, потребуется изменить конфигурацию maven. Например, если вы находитесь за прокси-сервером, вам нужно настроить maven с учетными данными прокси-сервера.

Кроме того, если вы вручную скопировали что-либо в каталог .m2/repository /, вы должны удалить его, и пусть maven помещает его туда правильно.

Красота maven заключается в том, что вам не нужно беспокоиться о вещах, подобных загрузке банок. Это просто для вас. Пусть это сделает это.

+0

Я попробовал ваше предложение mvn clean install, однако получил ту же ошибку. Хотелось бы, чтобы я позволил maven выполнить свою работу, но, к сожалению, удаленный сервер, на котором я строится, находится в частной интрасети, не подключенной к Интернету, поэтому maven не может загружать файлы. Мне пришлось вручную загрузить и установить 300 файлов, чтобы заставить это работать. Для меня это тайна, почему чистая заставит ее перестать работать. Он только очищает целевые папки? – user3217883

+0

Тот факт, что вы вручную загрузили 300 файлов, означает, что что-то не так с вашей конфигурацией maven или тем, как вы используете maven. Возможно, вам стоит попробовать переименовать ваш репозиторий и позволить Maven воссоздать новую. – Jon

+0

Чистка только очищает целевой каталог. Это не связано с каталогом репозитория. Насколько я знаю, нет никаких команд для очистки чего-либо в репозитории. Это связано с тем, что maven не ожидает, что вы столкнетесь с этими каталогами. Они должны управляться им. Если ваш репозиторий поврежден, попробуйте мое предложение выше. – Jon

0

Если у вас есть внутренний искусственный инвентарь, такой как JFrog, возможно, вы должны проверить, что там есть баночка. Не загружайте вручную в .m2, потому что это по крайней мере странно. В лучшем случае вы можете вручную загрузить банку в этом искусстве.

1

Вы должны избегать добавления зависимостей вручную.

Если вы не знаете groupId и artifactId зависимости, в которой вы нуждаетесь, выполните поиск по адресу http://mvnrepository.com/. Обычно groupId соответствует именам пакетов в файле jar.

В вашем случае, зависимость уже есть: http://mvnrepository.com/search?q=com.ibm.icu Итак, переходим к http://mvnrepository.com/artifact/com.ibm.icu/icu4j и получить версию зависимости вам нужно, например, 55,1: http://mvnrepository.com/artifact/com.ibm.icu/icu4j/55.1 Grab Maven XML-зависимость и поместить его в файл pom.xml:

<dependency> 
    <groupId>com.ibm.icu</groupId> 
    <artifactId>icu4j</artifactId> 
    <version>55.1</version> 
</dependency> 

Если вы не нашли требуемую зависимость попытаться найти его в Google. Иногда зависимость может быть найдена в некоторых корпоративных публичных репозиториях, а не в central. В этом случае вам необходимо добавить сторонний репозиторий в repositories section вашего pom.xml.


Если вы не можете найти свою зависимость в общественном хранилище, то у вас есть три варианта:

A. Установите баночку внутреннего сервера репозитория (например, нексус)

B . Поместите файл JAR в ваших исходных файлов проекта и declare project maven repository:

<repositories> 
    <repository> 
     <id>my-local-repo</id> 
     <url>file://${basedir}/my-repo</url> 
    </repository> 
</repositories> 

Важно: Вы должны оставить maven repository layout в своем локальном репозитории.

C. [Плохая практика] Используйте maven install plugin, чтобы установить пользовательскую банку в локальный репозиторий на вашем компьютере. Но это плохо. Не рекомендуется.

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=path-to-your-artifact-jar -DpomFile=path-to-pom 

D. [Bad Practice] Использование system dependency с абсолютной путь к файлу JAR, хотя это плохая практика, и его следует избегать.

<dependency> 
    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>X.Y.Z</version> 
    <scope>system</scope> 
    <systemPath>${user.home}/jars/my.jar</systemPath> 
</dependency> 
+0

Я попробую локальное хранилище, но для меня не имеет смысла, почему то, что я сделал, не работает на этот раз, как это было в других случаях. – user3217883

+0

Я создал локальный репозиторий здесь:/export/home/ripper/maven/repository и установил icu4j-2.6.1.jar. Также установлен связанный файл .pom. Добавлен тег репозитория в основной файл pom.xml. Результат: ошибка! – user3217883

+0

Вы должны сохранить структуру репозитория maven в своем локальном репозитории.Для вашего случая у вас должно быть два файла: '/ export/home/ripper/maven/repository/com/ibm/icu/icu4j/55.1/icu4j-55.1.jar' и'/export/home/ripper/maven/repository/ком/IBM/СИС/ICU4J/55,1/ICU4J-55.1.pom' –

Смежные вопросы