Apache Maven: сборка Java Hello World

Автор: | 11/06/2015
 

apache_maven_logoПример создания простого Java веб-проекта, сборки и упаковки его с помощью Apache Maven.

Установка Maven очень простая и описана, например, тут>>>, хотя пост достаточно старый.

Создадим директорию проекта:

$ mkdir -p /tmp/maven_example
$ cd /tmp/maven_example/

Клонируем пустой репозиторий:

$ git clone -b build_deploy_test https://user@stash.domain.net/scm/lon/social.git
...
Checking connectivity... done.
$ cd social/

С помощью плагина archetype:generate создаём проект Maven:

$ mvn archetype:generate -DgroupId=com.setevoy.testapp -DartifactId=setevoy_testapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
...
[INFO] Parameter: groupId, Value: com.setevoy.testapp
[INFO] Parameter: packageName, Value: com.setevoy.testapp
[INFO] Parameter: package, Value: com.setevoy.testapp
[INFO] Parameter: artifactId, Value: setevoy_testapp
[INFO] Parameter: basedir, Value: /tmp/maven_example/social
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /tmp/maven_example/social/setevoy_testapp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.885s
[INFO] Finished at: Wed Nov 04 14:53:16 UTC 2015
[INFO] Final Memory: 14M/59M
[INFO] ------------------------------------------------------------------------

Теперь у нас есть созданная структура веб-проекта со всеми необходимым каталогами и файлами:

$ ls -l
total 4
drwxrwxr-x 3 vagrant vagrant 4096 Nov  4 14:53 setevoy_testapp
ls -l setevoy_testapp/
total 8
-rw-rw-r-- 1 vagrant vagrant  739 Nov  4 14:53 pom.xml
drwxrwxr-x 3 vagrant vagrant 4096 Nov  4 14:53 src
$ tree  setevoy_testapp/src/
setevoy_testapp/src/
`-- main
    |-- resources
    `-- webapp
        |-- index.jsp
        `-- WEB-INF
            `-- web.xml

4 directories, 2 files

Корневой каталог проекта — setevoy_testapp — содержит файл pom.xml, в котором описываются инструкции для сборка проекта Maven-ом, и каталог src с исходными кодами проекта:

  • src/main/webapp — содержит index.jsp и каталог WEB-INF;.
  • src/main/webapp/WEB-INF — содержит web.xml
  • src/main/resources — для изображений и файлов настроек.

Содержимое pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.setevoy.testapp</groupId>
  <artifactId>setevoy_testapp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>setevoy_testapp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>setevoy_testapp</finalName>
  </build>
</project>

Далее — нам необходимо запустить саму сборку. Про жизненный цикл Maven можно почитать тут>>>.

Переходим в каталог проекта:

$ cd setevoy_testapp/

И запускаем сборку и уупаковку в war-файл:

$ mvn clean package
...
[INFO] Packaging webapp
[INFO] Assembling webapp [setevoy_testapp] in [/tmp/maven_example/social/setevoy_testapp/target/setevoy_testapp]
[INFO] Processing war project
[INFO] Copying webapp resources [/tmp/maven_example/social/setevoy_testapp/src/main/webapp]
[INFO] Webapp assembled in [17 msecs]
[INFO] Building war: /tmp/maven_example/social/setevoy_testapp/target/setevoy_testapp.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.313s
[INFO] Finished at: Wed Nov 04 14:57:49 UTC 2015
[INFO] Final Memory: 9M/59M

Результаты сборки будут располагаться в каталоге target:

$ ls -l target/
total 20
drwxrwxr-x 2 vagrant vagrant 4096 Nov  4 14:57 classes
drwxrwxr-x 2 vagrant vagrant 4096 Nov  4 14:57 maven-archiver
drwxrwxr-x 4 vagrant vagrant 4096 Nov  4 14:57 setevoy_testapp
-rw-rw-r-- 1 vagrant vagrant 2230 Nov  4 14:57 setevoy_testapp.war
drwxrwxr-x 2 vagrant vagrant 4096 Nov  4 14:57 surefire

Добавьте исключение в .gitignore:

**/target/*

Сохраняем проект:

$ git status
...
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	.gitignore
	setevoy_testapp/
$ git add -A
$ git status
...
	new file:   .gitignore
	new file:   setevoy_testapp/pom.xml
	new file:   setevoy_testapp/src/main/webapp/WEB-INF/web.xml
	new file:   setevoy_testapp/src/main/webapp/index.jsp
$ git commit -m "app1"
[build_deploy_test 50519e3] app1
 5 files changed, 34 insertions(+), 1 deletion(-)
 create mode 100644 .gitignore
 delete mode 100644 index.jsp
 create mode 100644 setevoy_testapp/pom.xml
 create mode 100644 setevoy_testapp/src/main/webapp/WEB-INF/web.xml
 create mode 100644 setevoy_testapp/src/main/webapp/index.jsp

Готово. Теперь достаточно поместить war-файл в каталог webapps сервер Tomcat или Jetty — и можно будет увидеть его в браузере.