Перейти к содержимому

Как подключить maven к существующему проекту

  • автор:

Добавить maven в IntelliJ IDEA в обычный java проект

Как мне это (именно версии 7.0.13). http://search.maven.org/#artifactdetails%7Cit.unimi.dsi%7Cfastutil%7C7.0.13%7Cjar добавить в IntelliJ IDEA в обычный java проект ? Не вручную, cкачивая jar.

Отслеживать
33.1k 2 2 золотых знака 33 33 серебряных знака 64 64 бронзовых знака
задан 3 сен 2016 в 11:43
713 1 1 золотой знак 6 6 серебряных знаков 25 25 бронзовых знаков

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

введите сюда описание изображения

  1. Нажать на папку с проектом правой кнопкой
  2. Выбрать «Добавить поддержку фреймворка»
  3. Выбрать из списка Maven

Отслеживать
ответ дан 10 июл 2019 в 6:08
Lukyanov Mikhail Lukyanov Mikhail
251 2 2 серебряных знака 4 4 бронзовых знака

Поздний ответ, наверное, но для истории:

Можно в корень обычного проекта в IDEA добавить pom.xml (хоть из другого проекта), подправить ему group, artifact, зависимости. Потом в контекстном меню для этого файла выбрать «Add as Maven Project». Проект станет теперь maven, дальше уже настраиваем его как обычный maven-проект.

Update простейший XML файл имеет вид

  4.0.0 . . 1.0-SNAPSHOT  

Отслеживать
33.1k 2 2 золотых знака 33 33 серебряных знака 64 64 бронзовых знака
ответ дан 21 июл 2017 в 15:32
Полина Бевад Полина Бевад
141 1 1 серебряный знак 2 2 бронзовых знака
Если вы еще добавите шаблон pom.xml , ответу цены не будет.
21 июл 2017 в 15:38

Можно выгрузить библиотеку из Maven.
Для этого:
1. Войти в структуру проекта;

2. В разделе «Библиотеки» выбрать «Из Maven»;

3. Ввести путь к библиотеке (можно искать как по groupId, так и по artifactId).
введите сюда описание изображения

Как с помощью maven подключить библиотеку к проекту

Спросите кого-нибудь, для чего вообще нужен Maven — 90 процентов поголовья программистов ответит, что именно для этого и будут во многом правы.

Если в случае с, например, C++ подключение библиотеки к своему проекту — это серьёзный шаг, который гарантированно усложнит сборку до такой степени, что придётся включить инструкции по подключению данной конкретной библиотеки в readme, то в случае с Java это делается легко и непринуждённо — не в последнюю очедь благодаря Maven.

Хочу отметить, что статья предназначена для тех, кто начал изучать java относительно недавно и хотя уже знает из предыдущей статьи, что такое maven — о том, что такое библиотеки, знает не очень хорошо, а как их подключать не знает вообще.

Как добавить в проект новый класс

Для того, чтобы использовать в своём коде какой-нибудь класс, помимо стандартного, нужно этот класс создать, то есть сделать соответствующий файл и написать внутри этого файла соответствующий код.

Свеженаписанный класс должен лежать там же, где и все остальные классы иначе компилятор его не увидит. Теперь, для того, чтобы его использовать, достаточно добавить в использующий его класс соответствующую директиву import.

Предлагаю присутствущим потратить минуту-другую на выражение благодарности капитану Очевидность, а после продолжить чтение.

Как добавить в проект класс, написанный кем-то другим

Ответ, вообще говоря, очевиден — надо скопировать этот класс в свой код.

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

Классы, используемые каким-то другим классом, кстати, принято называть зависимостями (dependencies), этого класса.

У такого подхода есть очевидный минус. Для каждого класса надо выискивать зависимости, а потом руками копировать их к себе. Если позже во всей этой куче кода найдётся какой-нибудь баг, то после появления фикса придётся повторить процесс заново.

Как добавить в проект класс, написанный кем-то другим, не копируя его в свой код

Во всех более-менее современных языках программирования эта проблема уже решена.

Всегда можно сказать компилятору, что классы нужно брать не только из директории с проектом, но и из других, указанных программистом директорий. В Java это делается с помощью параметра classpath.

Если вы работаете с Java то понимать, что такое classpath — строго обязательно, но конкретно для того, чтобы добавить к проекту библиотеку с помощью maven, этого знать не нужно. В контексте нашей темы можно считать classpath сущностью, в которой перечислены все места, где компилятор будет искать классы, необходимые приложению. Если какого-нибудь из этих классов нет ни в одном из этих мест, то программа работать не будет.

Теперь для того, чтобы использовать чужой класс, достаточно скачать код с этим классом, и добавить в classpath директорию, в которую скачан этот код.

По сравнению с предыдущим способом это заметный прогресс. Теперь нет никакой необходимости вручную отслеживать все зависимости того единственного класса, который нужен для работы вашего приложения. Для добавки багфиксов и всего такого достаточно просто скачать новую версию кода.

Вот собственно мы и подошли к ответу на вопрос, что такое библиотека.

Что такое библиотека

Библиотекой принято называть тот самый код, корневую директорию которого нужно добавить в classpath. То есть совокупность нужного нам класса и его зависимостей, а также классов, которые не являются зависимостями нужного нам класса, но содержатся в коде.

В случае с Java, код, который мы добавляем в classpath, можно скомпилировать и добавить в classpath уже директорию со скомпилированным кодом.

Ещё можно заархивировать скомпилированный код в формате zip, поменять расширение файла с архивом на jar и добавить в classpath файл уже этот файл. В контексте разработки на Java, jar файл тоже называется библиотекой.

jar файлы не решают ни одной из изложенных выше проблем, но их использование существенно облегчает передачу библиотек между программистами.

Но, есть одна существенная проблема, которую jar файлы тоже никак решить не помогают.

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

Как добавить в проект библиотеку, использующую другую библиотеку

Для того, чтобы добавить в проект библиотеку со всеми её зависимостями, придётся эти зависимости скачать и по одной добавить в проект. При обновлении каждой библиотеки зависимости придётся качать заново.

Может случиться так, что при обновлении какой-нибудь зависимости библиотека, класс из которой мы собираемся использовать в своём проекте, перестанет работать корректно — нам придётся внимательно следить за тем, чтобы такого не случилось и ответственно подходить к каждому обновлению, а лучше, обновлять библиотеки только если без обновления нельзя обойтись вообще.

Как убедиться, что обновление зависимости ничего не сломает

Сторого говоря — никак.

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

Если нет, то это является слабым свидетельством, что поломка отсутствует, но ничего не доказывает.

Но положим, что юнит тестам можно доверять. В этом случае при добавлении библиотеки придётся вручную проверить её совместимость с зависимостями запустив прилагаемые юнит тесты и делать это при каждом обновлении. Это, поверьте, мне тяжело.

Для того, чтобы избежать этой нудной и сложной работы, между программистами всего мира существует негласная договорённость. Библиотеки принято версионировать.

При создании библиотеки программист пишет её код, убеждается, что он работает корректно, а потом присваивает этому коду идентификатор, например номер, и после этого делает код доступным для других программистов чтобы они могли использовать эту библиотеку в своём коде.

Если другие программисты находят в библиотеке ошибку, то создатель библиотеки не просто молча её исправляет, а после исправления изменяет идентификатор библиотеки и теперь миру доступно две библиотеки с одинаковым названием, но разными идентификаторами.

Этот идентификатор принято называть версией библиотеки.

Версию библиотеки программист обновляет не только при исправлении ошибок, но и вообще при любом изменении.

Программисты, использующие эту стороннюю библиотеку при создании своих библиотек, или просто программ, указывают в документации не только название, но и версию, с которой их библиотека гарантировано работает корректно.

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

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

При обновлении какой-нибудь из библиотек процесс надо повторить. Это, поверьте мне, мучительно.

Как получить список всех библиотек, нужных проекту и добавить их в проект автоматически

И тут на помощь приходит Maven. Он формализует негласную договорённость между программистами и делает её гласной.

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

Скопировать эти библиотеки на машину программиста и добавить их в classpath — тоже не высшая математика. Нужно только знать, откуда качать библиотеки и описания их зависимостей, а также в каком формате эти зависимости описаны.

Эти вопросы в Maven успешно решены.

Как подключить библиотеку к Maven проекту

Тут всё в общем-то банально. Библиотека в понимании Maven, является артефактом, нужным для сборки программы.

У каждого артефакта, как мы помним, есть groupId, artifactId и version. Нужно только указать maven, что данный артефакт является зависимостью проекта.

Список зависимостей должен быть обернут тегом dependencies. Каждая отдельная зависимость должна быть обёрнута тегом dependency. Внутри тега dependency в тегах groupId, artifactId и version нужно указать значения соответствующих параметров.

Тут наверное надо дать пример pom.xml с добавленной библиотекой. Вот пример:

 4.0.0 com hello-world 1.0-SNAPSHOT  org.apache.commons commons-lang3 3.4    

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

Вот например так:

package com; import static org.apache.commons.lang3.ArrayUtils.*; public class Application < public static void main(String[] argv) < String[] phrase = ; phrase = add(phrase, " "); phrase = add(phrase, "world"); for (String word : phrase) < System.out.print(word); >System.out.println(); > >

Чтобы скомпилировать код надо написать

mvn compile
mvn exec:java -Dexec.mainClass="com.Application"

Этот код выведет Hello world, но, в отличии от предыдущей статьи, уже новым прогрессивным методом. С помощью библиотеки.

Вот собственно и всё.

Зависимости подключённого к проекту артефакта maven найдёт сам, сам составит список всех библиотек, необходимых проекту, включая зависимости зависимостей и зависимости зависимостей зависимостей, сам скачает их на машину, на которой происходит сборка и сам добавит их в classpath.

Это, поверьте мне, прекрасно.

Итого

  1. Классы, используемые другим классом, называются зависимостями этого класса
  2. Библиотекой принято называть совокупность классов, предназначенных для решения определённой задачи, и их зависимостей.
  3. Зависимости классов из библиотеки могут находиться в других библиотеках и тогда эти библиотеки называются её зависимостями.
  4. В Java скомпилированные классы из библиотеки можно упаковывать в zip архив с расширением jar. jar файлы тоже называются библиотекой.
  5. Библиотеки, используемые проектом, называются зависимостями проекта. Для подключения зависимости в maven используется тег dependency. Теги dependency должны находиться внутри тега dependencies.
  6. В Maven библиотека является артефактом, а значит имеет groupId, artifactId и version.
  7. Чтобы подключить библиотеку к проекту с помощью maven достаточно указать её groupId, artifactId и version.
  • Программирование
  • Java
  • Системы сборки

Как преобразовать Java проект в Maven проект в IntelliJ IDEA

Ситуация часто встречается у начинающих разработчиков, которые работают в среде разработки IntelliJ IDEA. Возможно, был создан обычный Java проект или модуль, который, по какой-то причине, нужно преобразовать в Maven проект. Например, исходный код был загружен из внешнего репозитория и необходимо использовать Maven для управления зависимостями и сборкой проекта.

Преобразование Java проекта в Maven проект в IntelliJ IDEA включает в себя несколько простых шагов:

  1. Открыть Java проект в IntelliJ IDEA.
  2. Перейти в меню «File», затем выбрать «New» -> «Module».
  3. В открывшемся окне выбрать «Maven». Далее нажать «Next».
  4. Заполнить информацию о проекте: GroupId, ArtifactId и версию. Затем нажать «Finish».

После выполнения этих шагов, IntelliJ IDEA создаст новый Maven модуль в существующем проекте. В этом модуле будет сгенерирован базовый файл pom.xml, который уже будет содержать необходимую информацию: имя проекта, идентификатор и репозиторий.

Если уже есть Java проект и необходимо просто добавить к нему поддержку Maven, то следует выполнить следующие шаги:

  1. Открыть Java проект в IntelliJ IDEA.
  2. Перейти в меню «File», затем выбрать «New» -> «File».
  3. Введите имя файла как «pom.xml» и нажмите «OK».
  4. В открывшемся файле необходимо вручную написать или вставить базовую структуру файла pom.xml.

Таким образом, преобразование Java проекта в Maven проект в IntelliJ IDEA может быть выполнено двумя способами: созданием нового Maven модуля или добавлением файла pom.xml в существующий Java проект. Оба способа позволяют использовать все преимущества Maven для управления зависимостями и сборкой проекта.

Сборка Java-проекта с использованием Maven

Этот урок освещает создание вами простого Java-приложения с использованием Maven.

Что вы создадите

Вы создадите простое приложение и соберете его с помощью Maven.

Что вам потребуется

  • Примерно 15 минут свободного времени
  • Любимый текстовый редактор или IDE
  • JDK 6 и выше

Как проходить этот урок

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

Чтобы начать с нуля, перейдите в Настройка проекта.

  • Загрузите и распакуйте архив с кодом этого урока, либо кнонируйте из репозитория с помощью Git: git clone https://github.com/spring-guides/gs-maven.git
  • Перейдите в каталог gs-maven/initial
  • Забегая вперед, установите Maven

Когда вы закончите, можете сравнить получившийся результат с образцом в gs-maven/complete .

Настройка проекта

Для начала вам необходимо настроить Java-проект перед тем, как собрать его Maven’ом. Т.к. урок посвящен Maven, сделаем проект максимально простым, насколько это возможно.

Создание структуры каталогов

В выбранном вами каталоге проекта создайте следующую структуру каталогов; к примеру, командой mkdir -p src/main/java/hello для *nix систем:

+-- src +-- main +-- java +-- hello

Внутри src/main/java/hello директории вы можете создать любые Java-классы, какие вы хотите. Для простоты и согласованности с остальной частью урока, Spring рекомендует вам создать два класса: HelloWorld.java и Greeter.java .

package hello; public class HelloWorld < public static void main(String[] args) < Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); >>
package hello; public class Greeter < public String sayHello() < return "Hello world!"; >>

Теперь, когда у вас есть проект, который вы можете собрать с Maven, вам нужно установит сам Maven.

Maven можно получить, скачав zip-файл с maven.apache.org/download.cgi. Необходимы только бинарные файлы, так что ищите ссылку на архив с именем apache-maven-version-bin.zip или apache-maven-version-bin.tar.gz.

Распакуйте архив и добавьте путь к каталогу bin в переменную окружения path.

Чтобы протестировать правильность установки Maven, запустите в командной строке:

mvn -v

Если всё было сделано правильно, то вы увидите сообщение примерно такого содержания:

Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 07:51:28-0600) Maven home: /usr/share/maven Java version: 1.7.0_09, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "10.8.3", arch: "x86_64", family: "mac"

Теперь у вас есть установленный Maven.

Создание простой сборки Maven

Теперь, когда Maven установлен, вам необходимо создать определение Maven-проекта. Maven-проекты определяются как XML-файлы с названием pom.xml. Помимо всего прочего, этот файл определяет имя проекта, версию, а также зависимости от сторонних библиотек.

Создайте файл с названием pom.xml в корневом каталоге проекта и наполните его следующим содержанием:


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.springframework
gs-maven
jar
0.1.0




org.apache.maven.plugins
maven-shade-plugin
2.1


package

shade



implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
hello.HelloWorld








За исключением дополнительного элемента , это простейший из pom.xml файлов, необходимый для сборки Java проекта. Он включает следующие детали конфигурации проекта:

  • — версия POM-модели (всегда 4.0.0)
  • — группа или организация, к которой принадлежит проект. Чаще всего выражается в виде перевернутого наоборот доменного имени
  • — имя, которое будет передано библиотеке экземпляра(artifact) проекта (к примеру, имя его JAR или WAR файла)
  • — версия, с которой будет собран проект
  • — как проект должен быть упакован. По умолчанию, с «jar» упаковывается в JAR-файл, «war» — WAR-файл

Когда речь заходит о выборе схемы управления версиями, Spring рекомендует [семантическое управление версиями] semver.org подход.

На данном этапе мы имеем минимальное, но уже рабочее определение Maven-проекта.

Сборка Java кода

Теперь все готово для сборки проекта Maven’ом. Вы можете выполнить несколько этапов жизненного цикла сборки, включая компиляцию кода, создание библиотеки пакета(такого, как JAR-файл) и установку библиотеки в локальный репозиторий Maven зависимостей.

Попробуйте собрать, выполнив команду, приведенную ниже:

mvn compile

Этим вы запустите Maven, передав ему указание на выполнение задачи compile. Когда он закончит, вы должны найни скомпилированные .class файлы в target/classes директории.

Вряд ли вы захотите распостранять или работать напрямую с .class файлами, поэтому вам полее подойдет выполнение задачи package:

mvn package

Задача package включает компиляцию вашего Java кода, запуск тестов, а в конце упаковывает в JAR-файл в target директории. Название JAR-файла будет основано на и . К примеру, с минимальным pom.xml(см. выше), JAR-файл будет иметь название gs-maven-initial-0.1.0.jar.

Если вы изменили значение с «jar» на «war», то результатом будет WAR-файл в target директории вместо JAR-файла.

Maven также хранит репозиторий зависимостей на вашей локальной машине(обычно в .m2/repository директории в вашей домашней папке) для быстрого доступа к зависимостям проекта. Если вы хотите добавить JAR-файл вашего проекта в локальный репозиторий, тогда вам необходимо выполнить задачу install :

mvn install

Задача install включает компиляцию, тестирование, упаковку кода проекта, а затем копирование в локальный репозиторий, тем самым другие проекты смогут ссылаться на него как на зависимость.

Говоря о зависимостях, пришло время объявлять зависимости в Maven сборке.

Объявление зависимостей

Простой «Hello World» пример полностью автономный и не зависит от каких-либо дополнительных библиотек. Однако, большинство приложений зависит от внешних библиотек, с реализацией распостраненного и/или сложного функционала.

К примеру, предположим, что в дополнение к «Hello World!» вы хотите, чтобы приложение печатало текущую дату и время. Вы могли бы использовать функциональность из стандартных(native) Java библиотек, но мы можем сделать это и другими интересными способами, например с помощью Joda Time библиотеки.

Для начала, изменим HelloWorld.java , как показано ниже:

package hello; import org.joda.time.LocalTime; public class HelloWorld < public static void main(String[] args) < LocalTime currentTime = new LocalTime(); System.out.println("The current local time is: " + currentTime); Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); >>

Здесь HelloWorld использует Joda Time LocalTime класс для получения и печати текущего времени.

Если бы вы запустили mvn compile для сборки проекта сейчас, то получили бы ошибку сборки, потому что вы не объявили Joda Time компилируемую зависимость в сборке. Вы можете это исправить, добавив следующие строки в pom.xml(в пределах элемента):

 

joda-time
joda-time
2.2

Этот блок XML объявляет список зависимостей проекта. В частности, он объявляет единственную зависимость от Joda Time библиотеки. В элементе, зависимость определяется через описание трех вложенных элементов:

  • — группа или организация, к которой принадлежит зависимость.
  • — необходимая библиотека
  • — версия необходимой библиотеки

По умолчанию, все зависимости определены как зависимости. Т.е. они должны быть доступны во время компиляции(а если вы собираете WAR-файл, то в /WEB-INF/lib каталоге). Кроме того, вы можете добавить элемент, с одним из значений:

  • provided — зависимости, которые требуются для компиляции кода проекта, но которые будут доступны во время выполнения кода контейнером(например, Java Servlet API)
  • test — зависимости, которые используются для компиляции и запуска тестов, но не требуемые для сборки или выполнения кода проекта

Сейчас, если вы выполните mvn compile или mvn package , Maven должен будет разрешить Joda Time зависимость из Maven Central репозитория и успешно собрать проект.

Здесь полная версия pom.xml :


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
org.springframework
gs-maven
jar
0.1.0




joda-time
joda-time
2.2







org.apache.maven.plugins
maven-shade-plugin
2.1


package

shade



implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
hello.HelloWorld








Полная версия pom.xml использует Maven Shade Plugin как удобный инструмент для создание выполняемого JAR-файла. Целью данного урока является показать, как начать работать с Maven, не используя, в частности, этот плагин.

Итог

Поздравляем! Вы создали простой, но эффективный файл сборки Maven для сборки Java проектов.

С оригинальным текстом урока вы можете ознакомиться на spring.io.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *