Если вы хотите, чтобы это происходило постоянно, удалите обертки <profile> ... <profile> и сделайте так, чтобы тег <build> находился чуть ниже <project>
Дэн Халберт,
3
@ Георгий, это не вызывает сомнений в lib /, но включает классы в скомпилированном проекте
Работают хорошо, но не обязательно размещать тег сборки внутри тегов профиля.
Жюльен БРЕНЕЛЬЕР
2
Примечание: <excludeScope>test</excludeScope>идет внутри configurationузла.
Джесси Чисхолм
84
Лучший подход зависит от того, что вы хотите сделать:
Если вы хотите объединить свои зависимости в файл WAR или EAR, просто установите тип упаковки вашего проекта на EAR или WAR. Maven объединит зависимости в нужном месте.
Если вы хотите создать файл JAR, который включает ваш код вместе со всеми вашими зависимостями, то используйте плагин сборки с дескриптором jar-with-dependencies . Maven сгенерирует полный JAR-файл со всеми вашими классами плюс классы из любых зависимостей.
Если вы хотите просто вставить свои зависимости в целевой каталог в интерактивном режиме, то используйте плагин зависимостей для копирования ваших файлов.
Если вы хотите получить зависимости для какого-либо другого типа обработки, вам, вероятно, потребуется сгенерировать свой собственный плагин. Существуют API для получения списка зависимостей и их расположения на диске. Вы должны будете взять это оттуда ...
Взгляните на плагин зависимостей Maven , а именно, зависимость: цель копирования . Взгляните на пример под заголовком Зависимость: копия-зависимости mojo . Задайте для свойства конфигурации outputDirectory значение $ {basedir} / target / lib (полагаю, вам придется протестировать).
В качестве альтернативы вы могли бы использовать $ {project.build.directory} / lib вместо $ {basedir} / target / lib
Cuga
31
Простое и элегантное решение для случая, когда нужно скопировать зависимости в целевой каталог, не используя другие фазы maven (я нашел это очень полезным при работе с Vaadin).
Спасибо! это самый простой способ просто скопировать библиотеки, которые потребуются проекту, в папку где-нибудь, чтобы вы могли скопировать их в другое место, если это необходимо, например, проект не на основе maven. Обратите внимание, что, конечно, вы можете просто передать жестко закодированную папку, чтобы использовать ее, если хотите, например,mvn dependency:copy-dependencies -DoutputDirectory=./lib
Выше будет работать в packageфазе, когда вы запускаете
mvn clean package
И зависимости будут скопированы в outputDirectory, указанный во фрагменте, т.е. libв этом случае.
Если вы хотите делать это только время от времени, никаких изменений в pom.xml не требуется. Просто запустите следующее:
mvn clean package dependency:copy-dependencies
Чтобы переопределить расположение по умолчанию, то есть ${project.build.directory}/dependenciesдобавить системное свойство с именем outputDirectory, т.е.
Если вы хотите доставить пакет вашего jar приложения вместе со всеми его зависимостями и некоторыми сценариями для вызова MainClass, посмотрите на appassembler-maven-plugin .
Следующая конфигурация создаст сценарии для Window и Linux для запуска приложения (сгенерированный путь, ссылающийся на все jar-файлы зависимостей, загрузит все зависимости (в папку lib ниже target / appassembler). Затем плагин сборки можно использовать для упаковки всего каталог appassembler в виде zip-файла, который установлен / развернут вместе с jar-файлом в хранилище.
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>appassembler-maven-plugin</artifactId><version>1.0</version><executions><execution><id>generate-jsw-scripts</id><phase>package</phase><goals><goal>generate-daemons</goal></goals><configuration><!--declare the JSW config --><daemons><daemon><id>myApp</id><mainClass>name.seller.rich.MyMainClass</mainClass><commandLineArguments><commandLineArgument>start</commandLineArgument></commandLineArguments><platforms><platform>jsw</platform></platforms></daemon></daemons><target>${project.build.directory}/appassembler</target></configuration></execution><execution><id>assemble-standalone</id><phase>integration-test</phase><goals><goal>assemble</goal></goals><configuration><programs><program><mainClass>name.seller.rich.MyMainClass</mainClass><!-- the name of the bat/sh files to be generated --><name>mymain</name></program></programs><platforms><platform>windows</platform><platform>unix</platform></platforms><repositoryLayout>flat</repositoryLayout><repositoryName>lib</repositoryName></configuration></execution></executions></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.2-beta-4</version><executions><execution><phase>integration-test</phase><goals><goal>single</goal></goals><configuration><descriptors><descriptor>src/main/assembly/archive.xml</descriptor></descriptors></configuration></execution></executions></plugin>
Дескриптор сборки (в src / main / assembly) для упаковки директории в виде zip будет:
Просто чтобы изложить то, что уже было сказано вкратце. Я хотел создать исполняемый файл JAR, который включал мои зависимости вместе с моим кодом. Это сработало для меня:
Ваш пример кода не решает проблему, он просто объединяет все в один JAR. Да, плагин сборки можно использовать для достижения этой цели, но не так.
Дункан Джонс
Хотя, при дальнейшем чтении, возможно, вы отвечаете на этот комментарий .
Дункан Джонс
это было так долго, что я действительно не помню ... плюс я стал довольно ржавым с тех пор, как сосредоточился на администрировании Linux в моей последней фирме - но спасибо за отзыв!
RubyTuesdayDONO
0
Если у вас возникли проблемы, связанные с зависимостями, которых нет в файле WEB-INF / lib при работе на сервере Tomcat в Eclipse, взгляните на это:
Ответы:
Это работает для меня:
источник
excludeScope
опцию ( maven.apache.org/plugins/maven-dependency-plugin/… ).<excludeScope>test</excludeScope>
идет внутриconfiguration
узла.Лучший подход зависит от того, что вы хотите сделать:
источник
У меня работает с каталогом зависимостей, созданным в целевой папке. Нравится это!
источник
Взгляните на плагин зависимостей Maven , а именно, зависимость: цель копирования . Взгляните на пример под заголовком Зависимость: копия-зависимости mojo . Задайте для свойства конфигурации outputDirectory значение $ {basedir} / target / lib (полагаю, вам придется протестировать).
Надеюсь это поможет.
источник
Простое и элегантное решение для случая, когда нужно скопировать зависимости в целевой каталог, не используя другие фазы maven (я нашел это очень полезным при работе с Vaadin).
Полный пример POM:
Тогда беги
mvn process-sources
Зависимости файла JAR можно найти в
/target/dependency
источник
Если вы хотите делать это время от времени (и, следовательно, не хотите менять POM), попробуйте следующую командную строку:
Если вы опустите последний аргумент , зависимости будут помещены в
target/dependencies
.источник
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Попробуйте что-то вроде этого:
источник
maven clean install
, тогда вы найдетеlib
вtarget
install
фазуprocess-resources
так, чтобы зависимости копировались доbuild
Все, что вам нужно, это следующий фрагмент внутри pom.xml
build/plugins
:Выше будет работать в
package
фазе, когда вы запускаетеИ зависимости будут скопированы в outputDirectory, указанный во фрагменте, т.е.
lib
в этом случае.Если вы хотите делать это только время от времени, никаких изменений в pom.xml не требуется. Просто запустите следующее:
Чтобы переопределить расположение по умолчанию, то есть
${project.build.directory}/dependencies
добавить системное свойство с именемoutputDirectory
, т.е.источник
Пред- полагая
вот что сработало для меня:
источник
Если вы хотите доставить пакет вашего jar приложения вместе со всеми его зависимостями и некоторыми сценариями для вызова MainClass, посмотрите на appassembler-maven-plugin .
Следующая конфигурация создаст сценарии для Window и Linux для запуска приложения (сгенерированный путь, ссылающийся на все jar-файлы зависимостей, загрузит все зависимости (в папку lib ниже target / appassembler). Затем плагин сборки можно использовать для упаковки всего каталог appassembler в виде zip-файла, который установлен / развернут вместе с jar-файлом в хранилище.
Дескриптор сборки (в src / main / assembly) для упаковки директории в виде zip будет:
источник
Если вы сделаете свой проект войной или ушной, Maven скопирует зависимости.
источник
Вы можете использовать плагин Shade для создания Uber JAR, в котором вы можете объединить все ваши сторонние зависимости.
источник
Просто чтобы изложить то, что уже было сказано вкратце. Я хотел создать исполняемый файл JAR, который включал мои зависимости вместе с моим кодом. Это сработало для меня:
(1) В pom под <build> <plugins> я включил:
(2) Запуск компиляции mvn: сборка создала нужный my-project-0.1-SNAPSHOT-jar-with-dependencies.jar в целевой папке проекта.
(3) Я запустил JAR с помощью java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar
источник
Это сложное решение для встраивания тяжелых зависимостей, но плагин сборки Maven помогает мне.
Ответ @ Rich продавца должен сработать, хотя для более простых случаев вам понадобится только эта выдержка из руководства по использованию :
источник
Если у вас возникли проблемы, связанные с зависимостями, которых нет в файле WEB-INF / lib при работе на сервере Tomcat в Eclipse, взгляните на это:
ClassNotFoundException DispatcherServlet при запуске Tomcat (зависимости Maven не копируются в wtpwebapps)
Вам просто нужно было добавить зависимости Maven в Свойства проекта> Сборка развертывания.
источник