Sunday 20 July 2014

Учебное пособие по maven

Maven - это современный расширенный build tool.

Загрузите и установите Maven. На той же странице, вы найдете инструкции по установке, там где написано:

Installation Instructions



Теперь попробуем с ним поработать. Прошу учесть что последовательность действий я беру с книги Apache Maven 3 Cookbook. Итак, приступим-с. В директории, где у нас должны помещаться проекты, пишем:

PS C:\Users\Administrator> mvn archetype:generate
[INFO] Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.
pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.p
om (4 KB at 8.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom (13 KB at
 78.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/21/maven-parent-21.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/21/maven-parent-21.pom (26 KB at 102.1 KB/
sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/10/apache-10.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/apache/10/apache-10.pom (15 KB at 81.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.
jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.j
ar (25 KB at 79.9 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-
2.4.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.4/maven-install-plugin-2
.4.pom (7 KB at 43.3 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9 KB at
60.7 KB/sec)
...

Затем появится вопрос о выборе номера

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 439:

Выбираем предлагаемый (нажимаем ввод)

Затем появляется вопрос о версии archetype, опять-же выбираем предлагаемый.

Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:

 Затем идет запрос о groupId, пишем:

pe-quickstart-1.1.pom (2 KB at 10.1 KB/sec)
Define value for property 'groupId': : com.test.project

Затем artifactId, пишем:

Define value for property 'artifactId': : myProject

Затем идет запрос о версии проекта и подтверждении пакеджа. Нажимаем везде ввод и вод к чему в конце концов приводит процесс постройки:

Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  com.test.project: :
Confirm properties configuration:
groupId: com.test.project
artifactId: myProject
version: 1.0-SNAPSHOT
package: com.test.project
 Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: C:\Users\Administrator
[INFO] Parameter: package, Value: com.test.project
[INFO] Parameter: groupId, Value: com.test.project
[INFO] Parameter: artifactId, Value: myProject
[INFO] Parameter: packageName, Value: com.test.project
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\Users\Administrator\myProject
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 29:20 min
[INFO] Finished at: 2014-07-20T13:27:06-04:00
[INFO] Final Memory: 10M/79M
[INFO] ------------------------------------------------------------------------
PS C:\Users\Administrator>

Вот что для нас сгенерировал maven:

PS C:\Users\Administrator> tree /F myProject
Folder PATH listing
Volume serial number is CC58-8E5C
C:\USERS\ADMINISTRATOR\MYPROJECT
   pom.xml

└───src
    ├───main
       └───java
           └───com
               └───test
                   └───project
                           App.java
    
    └───test
        └───java
            └───com
                └───test
                    └───project
                            AppTest.java

PS C:\Users\Administrator>

Как видите, пока не густо, но ведь надо хоть с чего-то начинать).

Теперь давайте скомпилируем наше "произведение искусства".

Перейдите к папке самого проекта, то есть там где находится pom.xml сгенерированный и запустите compile:

PS C:\Users\Administrator> cd myProject
PS C:\Users\Administrator\myProject> mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myProject 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plu
gin-2.6.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plug
in-2.6.pom (8 KB at 18.6 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plu
gin-2.6.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plug
in-2.6.jar (29 KB at 184.8 KB/sec)
...
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-compiler-manager/1.9.1/plexus-compiler-manage
r-1.9.1.jar (5 KB at 23.2 KB/sec)
Downloaded: http://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar (221 KB at 679
.3 KB/sec)
[INFO] Compiling 1 source file to C:\Users\Administrator\myProject\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.259 s
[INFO] Finished at: 2014-07-20T14:04:54-04:00
[INFO] Final Memory: 12M/72M
[INFO] ------------------------------------------------------------------------

Как видите, опять пошли загрузки и в конце результат компиляции. Давайте опять посмотрим что у нас из этого вышло:

PS C:\Users\Administrator\myProject> tree /F
Folder PATH listing
Volume serial number is CC58-8E5C
C:.
   pom.xml

├───src
   ├───main
      └───java
          └───com
              └───test
                  └───project
                          App.java
   
   └───test
       └───java
           └───com
               └───test
                   └───project
                           AppTest.java

└───target
    └───classes
        └───com
            └───test
                └───project
                        App.class

Заметь-те что скомпилировался только класс App, AppTest - нет. Maven создан таким образом, что бы придерживаться идеологии, или даже стандарту TDD (Test Driven Development), таким образом прежде чем создать решение, нужно подготовить для него тест, и вот после этого появляется четкое выражение, то-есть оно как бы приобретает видимую структуру, как должно выглядеть само решение, или по крайне мере более четкое чем казалось изначально. Идем дальше и выполняем тест:

PS C:\Users\Administrator\myProject> mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myProject 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-pl
ugin-2.12.4.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plu
gin-2.12.4.pom (11 KB at 24.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.12.4/surefire-2.12.4.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire/2.12.4/surefire-2.12.4.pom (14 KB at
103.6 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-pl
ugin-2.12.4.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.12.4/maven-surefire-plu
gin-2.12.4.jar (30 KB at 128.2 KB/sec)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myProject ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\Administrator\myProject\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ myProject ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ myProject ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\Administrator\myProject\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ myProject ---
[INFO] Compiling 1 source file to C:\Users\Administrator\myProject\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ myProject ---
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4
.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-booter/2.12.4/surefire-booter-2.12.4.
pom (3 KB at 24.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-api/2.12.4/surefire-api-2.12.4.pom (3
 KB at 18.3 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.12.4/maven-surefire-c
ommon-2.12.4.pom
...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4
.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.
jar (26 KB at 167.6 KB/sec)

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.test.project.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.205 s
[INFO] Finished at: 2014-07-20T14:13:12-04:00
[INFO] Final Memory: 13M/72M
[INFO] ------------------------------------------------------------------------
PS C:\Users\Administrator\myProject>

Заметь-те, опять куча загрузок, компиляция тест класса и затем запуск с результатом. И вот что у нас вышло на сей раз:

PS C:\Users\Administrator\myProject> tree /F /A
Folder PATH listing
Volume serial number is CC58-8E5C
C:.
|   pom.xml
|
+---src
|   +---main
|   |   \---java
|   |       \---com
|   |           \---test
|   |               \---project
|   |                       App.java
|   |
|   \---test
|       \---java
|           \---com
|               \---test
|                   \---project
|                           AppTest.java
|
\---target
    +---classes
    |   \---com
    |       \---test
    |           \---project
    |                   App.class
    |
    +---surefire-reports
    |       com.test.project.AppTest.txt
    |       TEST-com.test.project.AppTest.xml
    |
    \---test-classes
        \---com
            \---test
                \---project
                        AppTest.class

PS C:\Users\Administrator\myProject>

 В принципе у нас готов шаблон по элементарному проекту.


No comments:

Post a Comment