Часть 4. основы maven

Apache Maven Resources Plugin

The Resources Plugin handles the copying of project resources to the output directory. There are two different kinds of resources: main resources and test resources. The difference is that the main resources are the resources associated to the main source code while the test resources are associated to the test source code.

Thus, this allows the separation of resources for the main source code and its unit tests.

Starting with version 2.3 this plugin uses the Maven Filtering shared component for filtering resources.

Goals Overview

The Resources Plugin copies files specified by Resource elements, to an output directory. The three variations below only differ in how the resource and output directory elements are specified or defaulted. The Resources Plugin has three goals:

  • resources:resources copies the resources for the main source code to the main output directory.

    This goal usually executes automatically, because it is bound by default to the process-resources life-cycle phase. It always uses the project.build.resources element to specify the resources, and by default uses the project.build.outputDirectory to specify the copy destination.

  • resources:testResources copies the resources for the test source code to the test output directory.

    This goal usually executes automatically, because it is bound by default to the process-test-resources life-cycle phase. It always uses the project.build.testResources element to specify the resources, and by default uses the project.build.testOutputDirectory to specify the copy destination.

  • resources:copy-resources copies resources to an output directory.

    This goal requires that you configure the resources to be copied, and specify the outputDirectory.

Usage

General instructions on how to use the Resources Plugin can be found on the usage page. Some more specific use cases are described in the examples given below.

If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our issue tracker. When creating a new issue, please provide a comprehensive description of your concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason, entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated. Of course, patches are welcome, too. Contributors can check out the project from our source repository and will find supplementary information in the guide to helping with Maven.

Examples

The following examples show how to use the Resources Plugin in more advanced use cases:

  • Specifying a character encoding scheme
  • Specifying resource directories
  • Filtering
  • Including and excluding files and directories
  • Escape filtering
  • Copy resources
  • Binaries filtering
  • Custom resources filters

Default build lifecycle

Запустим сборку, указав фазу install:

mvn install

Обратите внимание, что pom.xml практически пустой – в нем не перечислены никакие фазы и goals, они все привязаны по умолчанию к сборке jar-файла:

<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>ru.sysout</groupId>
	<artifactId>example-maven-project</artifactId>
	<version>1.0</version>
</project>

При этом в pom.xml даже не указано, что надо собрать jar-файл – этот формат также подразумевается по умолчанию.

Вывод в консоль показывает, какие плагины и голы выполняются при сборке:

 --- maven-resources-plugin:2.6:resources (default-resources) @ example-maven-project ---
 Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
 Copying 0 resource
 
 --- maven-compiler-plugin:3.1:compile (default-compile) @ example-maven-project ---
 Nothing to compile - all classes are up to date
 
 --- maven-resources-plugin:2.6:testResources (default-testResources) @ example-maven-project ---
 Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
 skip non existing resourceDirectory C:\Code\sysout\example-maven-project\src\test\resources
 
 --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ example-maven-project ---
 No sources to compile
 
 --- maven-surefire-plugin:2.12.4:test (default-test) @ example-maven-project ---
 
 --- maven-jar-plugin:2.4:jar (default-jar) @ example-maven-project ---
 Building jar: C:\Code\sysout\example-maven-project\target\example-maven-project-1.0.jar
 
 --- maven-install-plugin:2.4:install (default-install) @ example-maven-project ---
 Installing C:\...\.m2\repository\ru\sysout\example-maven-project\1.0\example-maven-project-1.0.jar
 Installing C:\...\.m2\repository\ru\sysout\example-maven-project\1.0\example-maven-project-1.0.pom
 ------------------------------------------------------------------------
 BUILD SUCCESS

Как видно, по очереди выполняется:

  • копирование папки ресурсов main\resources
  • компиляция исходников из папки main\java
  • копирование тестовых ресурсов test\resources
  • компиляция исходников из папки test\java
  • далее происходит выполнение тестов
  • упаковка в jar и
  • копирование jar файла в .m2 папку на локальном компьютере.

Есть в жизненном цикле еще фаза deploy – развертывание на сервер, эта последняя фаза тут не выполнялась.

Жизненный цикл (lifecycle) сборки – это последовательность фаз (phases).

Выполнение предыдущих фаз

Обратите внимание, что мы указали одну фазу install, но выполняется целый жизненный цикл со всеми предыдущими фазами, фаза install в этом цикле последняя. Чтобы только скопировать ресурсы и скомпилировать проект, выполняем:

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

mvn compile

Чтобы, помимо этого, выполнить тесты и  упаковать  проект в jar, выполняем:

mvn package

(при этом выполнится компиляция и другие предваряющие package фазы).

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

mvn deploy

Все предыдущие фазы, включая install, также при этом выполнятся. В pom.xml при этом должна быть указана конфигурация с данными сервера, куда деплоить проект.

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

Попробуем добавить свое действие к двум фазам.

Описание Maven

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

  1. Сборка Java проекта с подтягиванием зависимостей.
  2. Создание jar.
  3. Автоматически сгенерировать сопроводительную документации для кода на основе комментариев.
  4. Создание дистрибутива.

Если проект java достаточно простой, можно собрать его вручную в командной строке. При больших объемах проекта такую команду записывают в bat/sh скрипт.

Структура проекта описывается через файл pom.xml (POM — Project Object Model), он должен лежать в корневой папке проекта.

Главным объектом Maven является артефакт (любая библиотека, хранящаяся в репозитории, зависимости и плагины).

Зависимости — это библиотеки, используемые в проекте для компиляции кода или его тестирования.

Плагины используются самим Maven при сборке проекта или других целей (деплоймент, создание файлов проекта для Eclipse и др.).

Архетип — стандартная организация файлов и каталогов, используемая в разных проектах (веб, swing-проекты, тесты). То есть Maven знает как обычно строятся проекты разных видов и в соответствии с выбранным архетипом создает структуру файлов и каталогов.

Название артефакта состоит из названия группы, собственного названия и версии. Например, Spring в среде Maven будет иметь название:

org.springframework.spring:2.5.5.

Последний домен — artifactId, все что перед ним — groupId.

Apache Maven Assembly Plugin

Introduction

The Assembly Plugin for Maven enables developers to combine project output into a single distributable archive that also contains dependencies, modules, site documentation, and other files.

Your project can easily build distribution «assemblies» using one of the prefabricated assembly descriptors. These descriptors handle many common operations, such as packaging a project’s artifact along with generated documentation into a . Alternatively, your project can provide its own descriptor and assume a much higher level of control over how dependencies, modules, file-sets, and individual files are packaged in the assembly.

Currently it can create distributions in the following formats:

  • zip
  • tar
  • tar.gz (or tgz)
  • tar.bz2 (or tbz2)
  • tar.snappy
  • tar.xz (or txz)
  • jar
  • dir
  • war
  • and any other format that the ArchiveManager has been configured for

If your project wants to package your artifact in an uber-jar, the assembly plugin provides only basic support. For more control, use the Maven Shade Plugin.

To use the Assembly Plugin in Maven, you simply need to:

  • choose or write the assembly descriptor to use,
  • configure the Assembly Plugin in your project’s pom.xml, and
  • run «mvn assembly:single» on your project.

To write your own custom assembly, you will need to refer to the Assembly Descriptor Format reference.

What is an Assembly?

An «assembly» is a group of files, directories, and dependencies that are assembled into an archive format and distributed. For example, assume that a Maven project defines a single JAR artifact that contains both a console application and a Swing application. Such a project could define two «assemblies» that bundle the application with a different set of supporting scripts and dependency sets. One assembly would be the assembly for the console application, and the other assembly could be a Swing application bundled with a slightly different set of dependencies.

The Assembly Plugin provides a descriptor format which allows you to define an arbitrary assembly of files and directories from a project. For example, if your Maven project contains the directory «src/main/bin», you can instruct the Assembly Plugin to copy the contents of this directory to the «bin» directory of an assembly and to change the permissions of the files in the «bin» directory to UNIX mode 755. The parameters for configuring this behavior are supplied to the Assembly Plugin by way of the assembly descriptor.

Goals

The main goal in the assembly plugin is the single goal. It is used to create all assemblies.

For more information about the goals that are available in the Assembly Plugin, see the plugin documentation page.

Assembly and Component Descriptor Schemas (XSD)

  • http://maven.apache.org/xsd/assembly-2.0.0.xsd, http://maven.apache.org/xsd/assembly-component-2.0.0.xsd (for version 3.0 and higher)
  • http://maven.apache.org/xsd/assembly-1.1.3.xsd, http://maven.apache.org/xsd/component-1.1.3.xsd (for version 2.5.4 and higher)
  • http://maven.apache.org/xsd/assembly-1.1.2.xsd, http://maven.apache.org/xsd/component-1.1.2.xsd (for version 2.2 and higher)
  • http://maven.apache.org/xsd/assembly-1.1.1.xsd, http://maven.apache.org/xsd/component-1.1.1.xsd (for version 2.2-beta-4 — 2.2-beta-5)
  • http://maven.apache.org/xsd/assembly-1.1.0.xsd, http://maven.apache.org/xsd/component-1.1.0.xsd (for version 2.2-beta-1 — 2.2-beta-3)
  • http://maven.apache.org/xsd/assembly-1.0.0.xsd, http://maven.apache.org/xsd/component-1.0.0.xsd (for version 2.1 and lower)

Usage

General instructions on how to use the Assembly Plugin can be found on the usage page. Some more specific use cases are described in the examples given below.

If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our issue tracker. When creating a new issue, please provide a comprehensive description of your concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason, entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated. Of course, patches are welcome, too. Contributors can check out the project from our source repository and will find supplementary information in the guide to helping with Maven.

Examples

To provide you with better understanding on some usages of the Assembly Plugin, you can take a look into the examples which can be found here.

Feature Summary

The following are the key features of Maven in a nutshell:

  • Simple project setup that follows best practices — get a new project or module started in seconds
  • Consistent usage across all projects — means no ramp up time for new developers coming onto a project
  • Superior dependency management including automatic updating, dependency closures (also known as transitive dependencies)
  • Able to easily work with multiple projects at the same time
  • A large and growing repository of libraries and metadata to use out of the box, and arrangements in place with the largest Open Source projects for real-time availability of their latest releases
  • Extensible, with the ability to easily write plugins in Java or scripting languages
  • Instant access to new features with little or no extra configuration
  • Ant tasks for dependency management and deployment outside of Maven
  • Model based builds: Maven is able to build any number of projects into predefined output types such as a JAR, WAR, or distribution based on metadata about the project, without the need to do any scripting in most cases.
  • Coherent site of project information: Using the same metadata as for the build process, Maven is able to generate a web site or PDF including any documentation you care to add, and adds to that standard reports about the state of development of the project. Examples of this information can be seen at the bottom of the left-hand navigation of this site under the «Project Information» and «Project Reports» submenus.
  • Release management and distribution publication: Without much additional configuration, Maven will integrate with your source control system (such as Subversion or Git) and manage the release of a project based on a certain tag. It can also publish this to a distribution location for use by other projects. Maven is able to publish individual outputs such as a JAR, an archive including other dependencies and documentation, or as a source distribution.
  • Dependency management: Maven encourages the use of a central repository of JARs and other dependencies. Maven comes with a mechanism that your project’s clients can use to download any JARs required for building your project from a central JAR repository much like Perl’s CPAN. This allows users of Maven to reuse JARs across projects and encourages communication between projects to ensure that backward compatibility issues are dealt with.

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

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

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

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

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

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

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

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

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

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

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

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

Maven JXR Plugin

The JXR Plugin produces a cross-reference of the project’s sources. The generated reports make it easier for the user to reference or find specific lines of code. It is also handy when used with the PMD Plugin for referencing errors found in the code.

Goals Overview

The JXR Plugin has 6 goals:

  • jxr:jxr is used to generate a cross-reference page of the project’s main sources. The generated JXR files can be linked to the javadocs of the project.
  • jxr:jxr-nofork is used to generate a cross-reference page of the project’s main sources without forking the generate-sources phase again. Note that this goal does require generation of main sources before site generation, e.g. by invoking mvn clean deploy site.
  • jxr:aggregate is used to generate an aggregated cross-reference page of the project’s main sources. The generated JXR files can be linked to the javadocs of the project.
  • jxr:test-jxr on the other hand, is used to generate a cross-reference page of the project’s test sources.
  • jxr:test-jxr-nofork on the other hand, is used to generate a cross-reference page of the project’s test sources. without forking the generate-test-sources phase again. Note that this goal does require generation of test sources before site generation, e.g. by invoking mvn clean deploy site.
  • jxr:test-aggregate on the other hand, is used to generate an aggregated cross-reference page of the project’s test sources.

Usage

General instructions on how to use the JXR Plugin can be found on the usage page. Some more specific use cases are described in the examples given below. Last but not least, users occasionally contribute additional examples, tips or errata to the plugin’s wiki page.

If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our issue tracker. When creating a new issue, please provide a comprehensive description of your concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason, entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated. Of course, patches are welcome, too. Contributors can check out the project from our source repository and will find supplementary information in the guide to helping with Maven.

Examples

To provide you with better understanding on some usages of the JXR Plugin, you can take a look into the following examples:

  • Aggregating JXR Reports for Multi-Projects
  • Linking JXR Files to Javadocs
  • Generate JXR without duplicate execution of phase generate-sources

Зависимости и репозитории.

Большинство популярных библиотек находятся в центральном репозитории , поэтому их можно сразу прописывать в раздел dependencies pom-файла.

Например, чтобы подключить Spring Framework нужно определить зависимость:

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifacrId>spring</artifactId>

<version>2.5.5</version>

</dependency>

</dependencies>

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

Специфические вещи не находятся в центральном репозитории и нужно в таких случаях указать репозиторий вручную. К примеру, добавим зависимость JSF-фреймворка ajax-компонентов JBoss RichFaces.

С зависимостями все просто:

<dependencies>

<dependency>

<groupId>org.richfaces.ui>/groupId>

<artifactId>richfaces-ui</artifactId>

<version>3.3.1.GA</version>

</dependency>

</dependencies>

А репозиторий JBoss нужно прописать вручную либо в файле setting.xml в корне локального репозитория, либо в pom.xml, в зависимости от того, нужен ли этот репозиторий во всех проектах или в одном конкретном:

<!— JBoss RichFaces Repository —> <repositories> <repository> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> <updatePolicy>never</updatePolicy> </snapshots> <id>repository.jboss.com</id> <name>Jboss Repository for Maven</name> <url> </url> <layout>default</layout> </repository> </repositories>

Обычно на сайтах крупных проектов пишут все что нужно для встраивания их библиотеки в проект на основе Maven.

Создание приложения из архетипа

На сайте http://maven.apache.org/guides/introduction/introduction-to-archetypes.html перечислены основные архетипы приложений, но несложно создать свой или найти более специфичный .

Для примера если нам нужно веб-приложение, находим подходящий архетип maven-archetype-webapp. В командной строке в нужном каталоге вводим команду Maven:

mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp

Теперь можем видеть наглядную структуру каталогов с говорящими названиями:

  • java — тут будут классы
  • webapp — страницы веб-приложения
  • resources — ресурсы
  • test — unit-тесты

Overview

In this quick tutorial, we’ll show how to set the Java version in Maven.

Before moving on, we can check the default JDK version of Maven. Running the mvn -v command will show the Java version in which Maven runs.

2. Use the Compiler Plugin

We can specify the desired Java version in the compiler plugin.

2.1. Compiler Plugin

The first option is setting the version in compiler plugin properties:

The Maven compiler accepts this command with –target and –source versions. If we want to use the Java 8 language features, the –source should be set to 1.8.

Also, for the compiled classes to be compatible with JVM 1.8, the –target value should be 1.8.

The default value for both of them is the 1.6 version.

Alternatively, we can configure the compiler plugin directly:

The maven-compiler-plugin also has additional configuration properties that allow us to have more control over the compilation process beyond -source and -target versions.

2.2. Java 9 and Beyond

Furthermore, starting from the JDK 9 version, we can use a new -release command-line option. This new argument will automatically configure the compiler to produce class files that will link against the implementation of the given platform version.

By default, the -source and -target options don’t guarantee a cross-compilation.

This means that we cannot run our application on older versions of the platform. Additionally, to compile and run the programs for older Java versions, we also need to specify -bootclasspath option.

To cross-compile correctly, the new -release option replaces three flags: -source, -target and -bootclasspath.

After transforming our examples, we can declare the following for the plugin properties:

And for the maven-compiler-plugin starting from the 3.6 version, this is what we can write:

Notice that we can add the Java version in a new <release> attribute. In this example, we compile our application for Java 7.

What’s more, we don’t need a JDK 7 installed in our machine. Java 9 already contains all the information for linking the new language features with JDK 7.

3. Spring Boot Specification

Spring Boot applications specify the JDK version inside of the properties tags in the pom.xml file.

First, we need to add spring-boot-starter-parent as a parent to our project:

This parent POM allows us to configure default plugins and multiple properties including the Java version — by default, the Java version is 1.8.

However, we can override the default version of the parent by specifying the java.version property:

By setting the java.version property, we declare that the source and the target Java versions are both equal to 1.9.

Above all, we should keep in mind that this property is a Spring Boot Specification. Additionally, starting from Spring Boot 2.0, Java 8 is the minimum version.

This means we can’t use or configure Spring Boot for the older JDK versions.

4. Conclusion

This quick tutorial demonstrated the possible ways of setting Java version in our Maven project.

Here’s a summary of the main takeaways:

  • Using <java.version> is possible only with the Spring Boot application.
  • For simple cases, maven.compiler.source and maven.compiler.target properties should be the best fit.
  • Finally, to have more control over the compilation process, use the maven-compiler-plugin configuration settings.

Как привязать к фазе свое действие

Во-первых, любое действие, которые вы добавляете к сборке, должно быть запрограммировано в виде Maven-плагина с goal (у плагина может быть и несколько goal, которые можно привязать к разным фазам). Этот плагин вы либо пишете сами, либо берете готовый. Готовых плагинов много.

Плагин – это java-приложение, упакованное в jar, как его написать, говорится здесь.

Во-вторых, чтобы добавить goal к фазе, вы прописываете в pom.xml этот плагин и goal, чуть ниже показано, как. Также можно указать фазу в теге <phase> (можно, а не нужно, потому что для плагина уже может существовать умолчательная фаза, заданная при программировании плагина; но ее может и не быть). Добавленный goal будет выполнен после всех уже привязанных по умолчанию к фазе goal-ов.

mvn install

Теперь можно добавить выполнение goal hello-maven-plugin:sayhi в фазы своего проекта, например в фазы compile и validate. Для этого в корень нашего почти пустого pom.xml дабавьте:

	<build>
		<plugins>
			<plugin>
				<groupId>sample.plugin</groupId>
				<artifactId>hello-maven-plugin</artifactId>
				<version>1.0</version>
				<executions>
					<execution>
						<id>execution1</id>
						<phase>validate</phase>
						<goals>
							<goal>sayhi</goal>
						</goals>
					</execution>

					<execution>
						<id>execution2</id>
						<phase>compile</phase>
						<goals>
							<goal>sayhi</goal>
						</goals>
					</execution>

				</executions>
			</plugin>
		</plugins>
	</build>

При этом  сначала выполнится компиляция (так как этот goal уже привязан по умолчанию), потом напечатается “Hello, world”.

Что касается фазы validate, то поскольку по умолчанию к этой фазе ничего не привязано, выполнится только наш goal sayhi (причем в самом начале, так как validate – первая фаза согласно документации).

В консоли мы увидим:

 Building example-maven-project 1.0
 ------------------------------------------------------------------------
 
 --- hello-maven-plugin:1.0:sayhi (execution1) @ example-maven-project ---
 Hello, world.
 
 --- maven-resources-plugin:2.6:resources (default-resources) @ example-maven-project ---
 Using platform encoding (Cp1251 actually) to copy filtered resources, i.e. build is platform dependent!
 Copying 0 resource
 
 --- maven-compiler-plugin:3.1:compile (default-compile) @ example-maven-project ---
 Nothing to compile - all classes are up to date
 
 --- hello-maven-plugin:1.0:sayhi (execution2) @ example-maven-project ---
 Hello, world.
........................................................

Кстати, наш goal можно выполнить и отдельно из командной строки:

mvn sample.plugin:hello-maven-plugin:1.0:sayhi

Как соотносятся phases и goals

Сборку с помощью Maven можно сравнить с обедом из нескольких блюд: в нем есть закуска, первое блюдо, второе блюдо, напиток и десерт – всё это фазы (phases), а все вместе – жизненный цикл. Второе блюдо может быть котлетой, а может рыбой. Конкретика задается с помощью goal (конкретная команда конкретного плагина). Например, на фазе compile по умолчанию выполняется compiler:compile – это goal с названием compile плагина compiler. Эта команда компилирует исходники. А десерт может быть шарлоткой, это тоже конкретный goal, например deploy:deploy фазы deploy.

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

Сложность состоит в том, что набор умолчаний в Maven велик –  согласно документации, в жизненном цикле много зарезервированных , в которых ничего не выполняется (например, фаза validate). Эти фазы подразумевают какой-то смысл, но зарезервированы на тот случай, если программист захочет к ним привязать какое-то свое действие.
Конкретно на фазе validate должна проверяться корректность проекта, но как именно, решает программист, если ему это надо. (А если не надо, фаза validate пропускается). Ниже мы попробуем привязать к этой фазе простейшее действие.

Есть также фазы, которые, наоборот, выполняются по умолчанию – например, фаза compile. К ней по умолчанию привязан свой плагин и goal, как уже упоминалось выше.

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

Можно также вывести все goals данной фазы так:

mvn help:describe -Dcmd=<фаза>

Попробуем запросить все goal фазы compile:

mvn help:describe -Dcmd=compile

Ответ такой:

compile' is a phase corresponding to this plugin:
org.apache.maven.plugins:maven-compiler-plugin:3.6:compile

То есть на фазе compile по умолчанию выполняется maven-compiler-plugin. Через двоеточие указана goal, она называется compile.

Spring Boot Specification

Spring Boot applications specify the JDK version inside of the properties tags in the pom.xml file.

First, we need to add spring-boot-starter-parent as a parent to our project:

This parent POM allows us to configure default plugins and multiple properties including the Java version — by default, the Java version is 1.8.

However, we can override the default version of the parent by specifying the java.version property:

By setting the java.version property, we declare that the source and the target Java versions are both equal to 1.9.

Above all, we should keep in mind that this property is a Spring Boot Specification. Additionally, starting from Spring Boot 2.0, Java 8 is the minimum version.

This means we can’t use or configure Spring Boot for the older JDK versions.

Какие еще есть жизненные циклы Maven

Хотя в работе чаще используется default lifecycle, о котором мы говорили выше, он не единственный.

Всего жизненных циклов у Maven определено три:

  • default – этот цикл отвечает за развертывание проекта (и все предыдущие, предваряющие развертывание действия).
  • clean – отвечает за удаление файлов, оставшихся с предыдущей сборки. Удаляет папку target.
  • site – отвечает за создание документации.

mvn clean install

Довольно часто указывают две фазы подряд:

mvn clean install

Да, это фазы, но они принадлежат разным циклам. Тут запускается два цикла по очереди – сначала цикл clean, а затем цикл default.

Фаза clean не входит в default цикл. Фаза clean – это часть одноименного цикла clean.

Мы не можем указать, например:

mvn validate install

Это фазы из одного и того же цикла default, они не могут быть выдернуты из цикла и выполнены вне его (помните правило выполнения всех предыдущих фаз).

Так что хотя многие и считают, что в примере mvn clean install указаны некоторые две выбранные фазы одного цикла, это ложная догадка,  на самом деле тут выполняются два цикла, а не две фазы.

Плагины

Плагины-это такие же артефакт, как и зависимости, поэтому описываются практически так же.

Вместо раздела dependencies-plugins, dependency-plugin, repositories-pluginRepositories, repository-pluginRepository.

Плагинами maven делает все, даже сборку проекта.

Настройка плагина ля создания проекта для Eclipse с использованием WTP ver. 2.0.

В разделе plugins файла pom.xml прописываем плагин:

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-eclipse-plugin</artifactId>

<configuration>

<wtpversion>2.0</wtpversion>

</configuration>

</plugin>

Теперь идем в командную строку и выполняем:

mvn eclipse:eclipse

Ждем пока Maven найдет все библиотеки в репозитории или скачает их и теперь Maven-проект можно открыть как проект Eclipse.

Однако плагины довольно легко найти, например по запросу «maven tomcat  plugin«.

Заключение:

Maven, в отличие от Ant, описывает конечную структуру проекта, а не пути к ее достижению.

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

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

Adblock
detector