Can I add jars to Maven 2 build classpath without installing them?
Могу ли я добавить jar в Maven 2 build classpath без их установки?
Maven 2 сводит меня с ума на этапе экспериментов / быстрого и грязного макета разработки.
У меня есть pom.xml файл, который определяет зависимости для фреймворка веб-приложения, который я хочу использовать, и я могу быстро создавать начальные проекты из этого файла. Однако иногда я хочу создать ссылку на стороннюю библиотеку, в которой еще не определен pom.xml файл, поэтому вместо того, чтобы создавать pom.xml файл для сторонней библиотеки вручную и устанавливать его, а также добавлять зависимости в свою pom.xml, я просто хотел бы сказать Maven: "В дополнение к моим определенным зависимостям, включите любые jar, которые также есть в /lib".
Кажется, что это должно быть просто, но если это так, я чего-то не понимаю.
Любые указания о том, как это сделать, очень ценятся. Кроме того, если есть простой способ указать maven на /lib каталог и легко создать pom.xml со всеми вложенными jar, сопоставленными с одной зависимостью, которую я затем мог бы назвать / установить и связать с одним махом, также было бы достаточно.
Переведено автоматически
Ответ 1
Проблемы популярных подходов
Большинство ответов, которые вы найдете в Интернете, предложат вам либо установить зависимость в свой локальный репозиторий, либо указать область "system" в pom и распространить зависимость с исходным кодом вашего проекта. Но оба этих решения на самом деле имеют недостатки.
Почему вы не должны применять подход "Установить в локальное хранилище"
Когда вы устанавливаете зависимость в свой локальный репозиторий, она остается там. Ваш артефакт дистрибутива будет работать нормально, пока у него есть доступ к этому репозиторию. Проблема в том, что в большинстве случаев этот репозиторий будет находиться на вашем локальном компьютере, поэтому не будет способа разрешить эту зависимость на любом другом компьютере. Очевидно, что зависимость вашего артефакта от конкретной машины - это не способ справиться с ситуацией. В противном случае эту зависимость придется устанавливать локально на каждой машине, работающей с этим проектом, который ничуть не лучше.
Почему вы не должны применять подход "Системной области"
JAR, от которых вы зависите при использовании подхода "Системной области", не устанавливаются ни в какой репозиторий и не прикрепляются к вашим целевым пакетам. Вот почему в вашем дистрибутиве не будет способа разрешить эту зависимость при использовании. Я полагаю, что это стало причиной того, что использование system scope даже устарело. В любом случае, вы не хотите полагаться на устаревшую функцию.
для каждого артефакта с идентификатором группы формы x.y.z Maven будет указывать следующее местоположение внутри каталога вашего проекта при поиске артефактов:
Используйте Maven для установки в репозиторий проекта
Вместо создания этой структуры вручную я рекомендую использовать плагин Maven для установки ваших jar в качестве артефактов. Итак, чтобы установить артефакт во внутренний репозиторий проекта в repo папке execute:
Поскольку выполнение команды установки для каждой библиотеки немного раздражает и определенно подвержено ошибкам, я создал служебный скрипт, который автоматически устанавливает все jar из lib папки в репозиторий проекта, автоматически разрешая все метаданные (groupId, artifactId и т.д.) Из имен файлов. Скрипт также распечатывает xml зависимостей, чтобы вы могли скопировать и вставить их в свой pom.
Включите зависимости в ваш целевой пакет
Когда вы создадите свой репозиторий внутри проекта, вы решите проблему распространения зависимостей проекта с его исходным кодом, но с тех пор целевой артефакт вашего проекта будет зависеть от неопубликованных jar, поэтому, когда вы установите его в репозиторий, у него будут неразрешимые зависимости.
Чтобы решить эту проблему, я предлагаю включить эти зависимости в ваш целевой пакет. Это вы можете сделать либо с помощью Assembly Plugin, либо лучше с помощью OneJar Plugin. Официальную документацию по OneJar легко понять.
Ответ 2
Только для выброшенного кода
установите scope == system и просто создайте groupId, artifactId и version