Статьи

Быстрая настройка для облегченной среды разработки Maven

С тех пор как я начал свою карьеру, я всегда ненавидел тратить время на настройку среды разработки. Так уж сложилось, что мне пришлось установить весь  сервер Oracle  на моем (плохом) компьютере, просто потому, что тот, кто создавал этот проект, не знал, что MySQL также подойдет.

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

В конце концов, установка вещей и решение связанных с ними проблем занимает много времени ( я программист, я хочу писать код!) и это всегда утомительно!

Я закончил с этим решением, которое (пока и для небольших проектов) прекрасно работает для меня. Я использую MavenJetty  и  HSQLDB . В этой настройке можно запустить приложение без необходимости установки базы данных и сервера приложений. Он использует код, который будет работать независимо от среды (или использовать некоторые хитрости для взлома небольших кусков кода), и вы можете подготовить чистый компьютер, установив на нем только Maven и систему контроля версий. Единственные требования, установленные на машине:

  • Java 1.7+ (требуется Jetty)
  • Maven 3+

Конфигурация Maven

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

Прежде всего, мы должны настроить  jetty-maven-plugin:

Почему пристань?

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

В нашем  pom.xml добавляется следующий плагин:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.0.5.v20130815</version>
    <configuration>
        <scanIntervalSeconds>0</scanIntervalSeconds>
        <jettyXml>jetty/jetty.xml</jettyXml>
        <webApp>
             <extraClasspath>${basedir}/jetty/classpath</extraClasspath>
             </webApp>
     </configuration>
     <dependencies>
         <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.2.9</version>
            <scope>runtime</scope>
         </dependency>
    </dependencies>
</plugin>

С помощью этого фрагмента мы настраиваем экземпляр Jetty с файлом конфигурации ( jetty.xml) и   папкой classpath, куда мы помещаем внешние ресурсы (я использую его для  файла свойств ).

Конфигурация причала

Продолжайте создавать файл  jetty.xml в вашем проекте по адресу  ${projectHome}/jetty/jetty.xml.

Теперь мы можем использовать нашу  jetty.xml для настройки источника данных JNDI:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<Configure id="Server" class="org.eclipse.jetty.server.Server">
     <New id="myApplicationDs" class="org.eclipse.jetty.plus.jndi.Resource">
         <Arg></arg>
         <Arg>jdbc/myAppDataSource</Arg>
         <Arg>
             <New class="org.hsqldb.jdbc.JDBCDataSource">
                 <Set name="DatabaseName">file:database/application</Set>
                 <Set name="User">user</Set>
                 <Set name="Password">user</Set>
             </New>
         </Arg>
     </New>
</Configure>

При этом мы настраиваем источник данных JNDI, который подключается к HSQLDB.

Почему HSQLDB?

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

Вы заметили  dependency в конфигурации плагина Maven? Благодаря этому нам не нужно ничего делать с HSQLDB, чтобы он работал!

Используя URL JDBC file:database/{dbname}, мы советуем HSQLDB использовать файл для хранения базы данных (в конфигурации интеграционных тестов мы также можем использовать его для запуска базы данных в памяти, используемой только для тестов).

Использование базы данных

И что теперь?

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

Интернет полон статей о том, как получить  из JNDI. javax.sql.DataSource

Мне нравится использовать Spring, поэтому я помещаю его в контекст Spring:

 <jee:jndi-lookup jndi-name="jdbc/myAppDataSource" id="dataSource" />

In the end, to start up our application server with the application let’s run:

mvn jetty:run

Wait…where is the database?

Once the application is started, the database is created inside ${projectHome}/database, so don’t forget to make your version control system ignore it!

HSQLDB GUI

If you want to use the HSQLDB GUI, run this command:

java -cp hsqldb-2.2.9.jar org.hsqldb.util.DatabaseManager

You can find the jar in your Maven repository folder ($USER_HOME/.m2/repository).

When you are asked for the database path, put:

jdbc:hsqldb:file:${projectHome}/database/${dbname};lock_file=false;readonly=true

Using lock_file and readonly, you can connect to your database even if the application is using it.

A Little Consideration

All this can be very useful if you use an ORM (JPA, Hibernate, etc.) that creates the database for you at the start of the application. Otherwise, you have to setup a script or create it manually.

The End

Hope that you enjoyed it!