Как внедрить проект maven в приложение Java Swing

Я хотел создать настольное приложение Java, которое может отображать .shp (файл формы) и редактировать таблицу атрибутов этого файла формы. Я следил за этим кратким руководством на веб-сайте geotools, чтобы узнать часть отображения шейп-файла в приложении. Я успешно создал приложение в учебнике и смог отобразить в нем файл формы.

Теперь я хочу сделать то же самое в приложении Java Swing, которое я уже создал, с несколькими другими функциями. У меня есть JFrame, в котором я хочу отобразить карту (файл формы). Я скопировал код и все необходимые библиотеки в проекте maven в проект java swing, но это дало мне эту ошибку.

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/vividsolutions/jts/geom/Geometry

Я думаю, что невозможно запустить скопированный код без файла pom.xml в проекте maven.

Я могу ошибаться, называя это «приложением maven» или «проектом maven». У меня очень мало знаний в maven, но довольно хорошие знания в Java SE.

Я просто хочу отобразить карту в приложении Java Swing, как я сделал в приложении maven.

Может ли кто-нибудь помочь мне в этом?

Спасибо!


person direndd    schedule 08.06.2013    source источник
comment
Какой редактор вы используете для написания Java? Затмение? НетБинс? Ви?   -  person Nathaniel Waisbrot    schedule 08.06.2013
comment
В настоящее время я использую Net Beans. Я создал свое приложение Swing, используя Net Beans.   -  person direndd    schedule 08.06.2013


Ответы (1)


Maven — это программа, которая обрабатывает зависимости проекта (это много вещей, но это ее самая важная функция для вас).

В вашем случае Maven знает, что вашему проекту требуется артефакт gt-shapefile (термин Maven для банок и подобных им вещей), потому что вы так сказали. Но Maven будет искать pom.xml файл для gt-shapefile и узнаете, что ему также нужны gt-data, gt-referencing и jdom. Затем он просматривает POM для каждого из их и обнаруживает дополнительные зависимости, пока не соберет полный набор.

Как только Maven выяснит все необходимые библиотеки, он может выполнить сборку (таким образом, как Ant или ваша IDE, запускающая компилятор Java). Как только код скомпилирован (или упакован, если у вас есть Maven для создания jar), Maven готов и не имеет ничего общего с готовым продуктом.

Swing — это стандартная графическая библиотека. Это зависимость во время компиляции, если вы пишете код, который использует его классы, и когда вы запускаете этот код позже, Java нужно будет найти связь с классами Swing.

Итак, для терминологии: вы можете описать проект с помощью Maven, Ant или NetBeans (который является слоем на Ant) или Eclipse. Вы можете использовать любой из этих инструментов построения проектов для компиляции кода, использующего классы Swing. На самом деле, поскольку классы кода Swing являются частью стандартной библиотеки, вам вообще не нужно упоминать какие-либо jar-файлы для работы с Swing.


Хорошо, теперь о вашем вопросе.

Один из вариантов для вас - просто использовать Maven. Преобразуйте существующее приложение в проект Maven, скопировав его файлы в структуру в стиле Maven. Есть страница по использованию Maven с NetBeans, которая может помочь. По сути, исходный код Java для приложения находится в src/main/java (оттуда начинаются каталоги с именами пакетов), элементы, не относящиеся к коду (например, файлы изображений), — в src/main/resources, а материалы, связанные с модульными тестами, — в src/test/java и src/test/resources. Если ваше приложение простое, это не должно быть слишком сложным, и вы можете найти Maven удобным в использовании.

Если ваш проект сложен или используется совместно с людьми, которые не используют Maven, или вам это просто не нужно, вам следует выяснить, какие зависимости вам нужны. Я предполагаю, что для этих инструкций у вас установлен Maven и вы находитесь в оболочке Unix.

Перейдите в корневой каталог проекта Geotools на основе Maven (каталог, содержащий его pom.xml). Вы можете скопировать все зависимости с помощью команды

mvn dependency:copy-dependencies -DoutputDirectory=jars

Это создаст подкаталог с именем «jars», содержащий все jar-файлы, необходимые для сборки проекта (включая транзитивные зависимости). Теперь просто свяжите эти jar-файлы с существующим приложением (или убедитесь, что они уже связаны).

Если вам интересно, вы можете запустить

mvn dependency:tree

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

person Nathaniel Waisbrot    schedule 08.06.2013
comment
Большое спасибо за понятное объяснение и ответ. Теперь maven немного ясен для меня. Я выбрал последний вариант, так как мне нужно поделиться проектом с разработчиками, не являющимися maven. Я создал папку jars со всеми файлами jar и просто добавил их в папку библиотек моего обычного проекта приложения Java Swing. Это сработало! :) - person direndd; 09.06.2013