pom.xml и настройки.xml
Pom.xml и настройка.xml можно сказать, что являются двумя наиболее важными файлами конфигурации в Maven, которые определяют основные функции Maven. Хотя в предыдущих статьях упоминалось содержание в pom.xml и настройках. XML в фрагментах, все они кратко упоминаются, а обучение и исследования не подробно описаны. Цель этой статьи - подробно изучить эти два важных файла конфигурации. Эти два файла конфигурации могут привести ко многим темам Maven.
Мавен координат
Во -первых, давайте поговорим о том, почему нам нужно использовать координаты Maven.
Мир Maven имеет очень большое количество компонентов, то есть некоторые банки, войны и другие файлы, которые обычно используются. Прежде чем Maven введет концепцию координат для этих компонентов, мы не можем использовать какой -либо метод для уникального идентификации всех этих компонентов. Поэтому, если вам нужно использовать весенние зависимости, перейдите на официальный веб -сайт весна, чтобы искать; Если вам нужно использовать зависимости log4j, то перейдите на официальный веб -сайт Apache для поиска. Из -за различных стилей каждого веб -сайта много времени тратится на поиск и просмотр веб -страниц. Без единых норм и правил работы не могут быть автоматизированы, а повторяющийся труд должен быть оставлен на машинах.
Maven определяет набор правил: любой компонент в мире может быть уникально идентифицирован координатами Maven. Координатные элементы Maven включают Groupid, Artifactid, версию, упаковку и классификатор. Теперь, пока мы предоставляем правильные координаты элементов, Maven может найти соответствующий компонент. Что касается того, где загрузить, у Maven есть встроенный адрес центрального склада "http://repo1.maven.org/maven2". Центральный склад содержит большинство популярных компонентов проекта с открытым исходным кодом в мире. Мавн будет загружать их при необходимости. Конечно, вы также можете настроить свой собственный адрес центрального склада и загрузить компоненты на своем собственном центральном складе.
Например, весенний контекст:
<dependency> <groupid> org.springframework </groupid> <artifactid> spring-context </artifactid> <sersion> 4.2.6.release </version> </deperency
Взгляните на элементы подчиненного:
Это примерно концепция координат Maven. Понимание координат Maven является очень важным шагом в понимании Maven.
Транзитивная зависимость
Что такое транзитивная зависимость? Возьмите весну в качестве примера. При использовании Spring вы будете полагаться на другие библиотеки класса с открытым исходным кодом. Есть два способа сделать это:
1. Загрузите большой пакет .zip, который содержит все весенние банки, но это часто представляет много ненужных зависимостей
2. Только скачать пакеты с пружиной .zip, не включайте зависимости. При их использовании добавьте другие зависимости, необходимые в соответствии с информацией об ошибке.
Очевидно, что оба подхода очень неприятны, и механизм переходной зависимости Мавен хорошо решает эту проблему. Откройте pom.xml Spring-core-4.1.0.0.-Release, и я перехватываю ключевую часть:
<Depectidents> <dependency> <groupid> commons-codec </groupid> <artifactid> commons-codec </artifactid> <serse> 1.9 </version> <crappe> compile </scope> <putainal> true </optional> </degondency> <Dependency> <groupId> commons-unging> </artifactid> </artemonding> <dehyed> <groupid> <serse> 1.1.3 </version> <cracpe> compile </scope> </dependency> ... </depertive>
Например, Project A зависит от Spring-Core, Spring-Core зависит от Commons-Codec и Commons-Logging, поэтому Commons-Codec и Commons-Logging являются переходными зависимостью проекта A. С механизмом переходной зависимости при использовании Spring-Core вам не нужно рассматривать, от чего он зависит, и вам не нужно беспокоиться о внедрении незначной зависимости. Maven проанализирует каждый прямой зависимость и введет необходимые косвенные зависимости в текущий проект в форме переходных зависимостей.
С механизмом переходной зависимости, с одной стороны, он значительно упрощает и облегчает объявление зависимости. С другой стороны, в большинстве случаев нам нужно только заботиться о том, каковы прямые зависимости проекта, и не нужно учитывать, какие переходные зависимости будут введены этими прямыми зависимостями. Однако иногда у транзитивных зависимостей также возникают некоторые проблемы. В настоящее время нам нужно очистить путь, с которого была введена транзитивная зависимость. Это называется посредничеством зависимостей. Есть два основных принципа посредничества в зависимости:
1. a-> b-> c-> x (1.0), a-> d-> x (2.0), в настоящее время есть две версии x на два пути зависимости. В настоящее время ближайший путь предпочтительнее, поэтому x (2.0) будет проанализирован и используется.
2. Длина зависимости A-> b-> y (1.0), A-> c-> y (2,0), Y (1,0) и Y (2,0) одинаковы. Начиная с Maven2.0.9, первое заявление следует приоритету, то есть зависимость от высшего порядка является предпочтительной.
Исключить зависимости
Транзитивные зависимости косвенно вводят в проект множество зависимостей, что значительно упрощает управление зависимостями проекта, но иногда эта функция также может вызвать проблемы. Например, есть ситуация:
Текущий проект по какой -то причине зависит от A. A A зависит от версии снимка другой библиотеки классов. Затем этот снимок станет переходной зависимостью текущего проекта. Во -вторых, нестабильность снимка будет напрямую повлиять на текущий проект. В настоящее время снимок должен быть исключен, и в текущем проекте объявлена формальная версия библиотеки классов.
Очень просто исключить зависимости, давайте посмотрим на метод написания:
<dependency> <groupId>com.alibaba.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>3.2.7</version> <exclusions> <exclusion> <groupId>apache-lang</groupId> <artifactId>commons-lang</artifactId> </exclusion> </exclusions></dependency>
Здесь я представил зависимость RocketMQ, но я не хочу полагаться на Apache-Lang в RocketMQ, но хочу вводить зависимости самостоятельно, поэтому я исключил Apache-Lang.
Здесь следует отметить, что при объявлении исключения необходимы только Groupid и Artifactid, а элементы версии не нужны. Это связано с тем, что для однозначного определения зависимости в графике зависимостей необходимы только GroupId и Artifactid. Другими словами, в зависимости от мавена, невозможно иметь две зависимости с одной и той же группой и артефактидом, но разными версиями.
Настройки.xml
Настройки.xml - основная конфигурация Maven. Есть много элементов, так что давайте посмотрим на это один за другим.
1. Прокси
Прокси означает доверенность Мавена. Давайте посмотрим на метод написания:
<proxies> <proxy> <id> Необязательный </id> <active> true </active> <protocol> http </protocol> <sername> proxyuser </username> <shours> proxypass </password> <host> proxy.host.net </host> <port> 80 </port> <NeProxyhosts> local.net | ask.host.com </nonproxyhosts> </proxy> </proxies>
Прокси необходим, потому что много раз ваша компания требует, чтобы вы имели доступ к Интернету, используя сертифицированный прокси -сервер в безопасности на основе соображений безопасности. В этом случае вам необходимо настроить HTTP -прокси для Maven, чтобы он позволил ему добраться до внешнего репозитория обычно для загрузки необходимых ресурсов. Несколько прокси -элементов могут быть настроены в соответствии с прокси. Если объявлено несколько прокси -элементов, первый активированный прокси, активированный по умолчанию. Active верен для активации прокси -прокси, протокол представляет прокси -прокси, используемый, конечно, наиболее важным является указание правильного имени хоста (хост) и порта (порт). Если прокси -сервер нуждается в аутентификации, настройте имя пользователя и пароль. Элемент непрокихоста указывает, какие имена хостов не требуют прокси. Вы можете использовать "|" Чтобы разделить несколько имен хоста, а также поддерживать подстановку «*».
2. Репозиторий
Репозиторий представляет собой центральный склад Maven, потому что, хотя компоненты на удаленном складе по умолчанию очень велики, всегда будут времена, когда они не удовлетворят наши потребности, а затем будут использоваться другие центральные склады. Давайте посмотрим на метод написания:
<perpository> <id> public </id> <mame> локальный частный nexus </name> <url> http://192.168.1.6:8081/nexus/content/groups/public </url> <leleases> <enabled> true </enabled> </lepasees> <mapnshots> <Nabledate> falless> anableded> falless> anableded> falless> anabled> falless> anableded> falless> anableded> falless> falleses> falleses> falleses> falleses> falleses> falleses> falleses> falleses> falleses> falleses> anabled> </snapshots> </Repository>
Многочисленное хранилище может быть объявлено. ID должен быть уникальным. Обратите особое внимание, что идентификатор, используемый центральным хранилищем, с которым поставляется Maven, является центральным. Если в других объявлениях репозитория также используются этот идентификатор, конфигурация центрального репозитория будет перезаписана. Выпуски и снимки важнее. Первое означает открытие поддержки версии версии релиза для репозитория, а последний означает закрытие поддержки версии Snapshot Download для репозитория. Таким образом, Maven перейдет в репозиторий, чтобы загрузить версию репозитория, не загрузив версию репозитория.
3. Сервер
Большинство удаленных складов можно получить без аутентификации, но иногда они рассматриваются в факторах безопасности и необходимы предоставить информацию об аутентификации для доступа к некоторым удаленным складам. Для соображений безопасности информация о аутентификации обычно помещается только в настройки.xml, а сервер является элементом аутентификации. Взгляните на конфигурацию:
<Server> <id> nexus-releases </id> <sername> развертывание </username> <shours> развертывание </password> </server>
Ключ здесь - идентификатор. Этот идентификатор должен быть точно таким же, как идентификатор репозитирийного элемента, который должен быть аутентифицирован. Другими словами, формальный идентификатор связывает информацию об аутентификации и конфигурацию репозитория.
4. Зеркало
Если Warehouse X может предоставить весь контент, хранящийся на складе Y, то склад X можно рассматривать как зеркало склада Y. Другими словами, любой компонент, который может быть получен из Y, может быть получен из X., например, «http://maven.net.cn/content/groups/public/» - это центральный warhouse. "http://repo1.maven.org/maven2/" в Китае. Из -за географических факторов местоположения зеркало часто может предоставлять более быстрые услуги, чем центральный склад, поэтому используется зеркало.
Посмотрите на конфигурацию зеркала:
<Mirror> <id> nexus </id> <mame> внутренний репозиторий Nexus </name> <url> http://192.168.1.6:8081/nexus/content/groups/public </url> <mirrorof>*</mirrorof> </mirror>
В этом примере Mirrorf составляет *, что указывает на то, что конфигурация является зеркалом для всех центральных репозиториев, и любые запросы на центральный репозиторий будут переданы в зеркало. Остальные три идентификатора, имя и URL -адресе по трем элементам ничем не отличаются от конфигурации общего склада, представляя уникальный идентификатор, имя и адрес зеркального склада. Точно так же, если изображение требует аутентификации, аутентификация репозитория также может быть настроена на основе идентификатора.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!