введение
Maven — это единственный автоматизированный инструмент сборки, поддерживаемый Apache Software Foundation и предназначенный для создания проектов и управления зависимостями для платформы Java.
Сначала задайте себе несколько вопросов
Порядок поиска зависимостей Maven, объем, жизненный цикл, принципы зависимости, как разрешать конфликты зависимостей и почему бы не настроить номер версии стороннего пакета.Если вы можете ответить на него гладко, пожалуйста, поставьте лайк и выходите . 🤭
Если вы просто расплывчаты, вы можете взглянуть на следующую статью (все темы взяты из реальных вопросов интервью пользователей сети)
зависит от порядка поиска
Интервьюер 👨: Давайте разогреемся небольшим вопросом, как Maven находит зависимости?
Сяо Мин 🤪: Я пойду первымместный складискать, а затем идти в компаниюСобственный склад серверовВ поисках, как правило, на частных складах серверов хранятся пакеты jar, разработанные самой компанией, которые в конечном итоге будут поддерживаться командой Apache.центральный складИщите, и однажды найдя в одном месте, больше не ищите. Интервьюер, сделайте это немного сложнее. Слишком легко
Интервьюер 👨: Молодой человек, я очень волнуюсь, тогда я спрошу вас, в нашем файле pom много тегов, многие студенты путаются в использовании различных тегов, позвольте мне сначала спросить вас о роли нескольких общих тегов.
Сяо Мин 🤪: Пусть лошадь подойдет.
Как подтвердить уникальное представление этой зависимости
Интервьюер 👨: В нашем проекте много зависимостей, как программа определяет расположение этой зависимости?
Сяо Мин 🤪: Это просто
Как правило, мы используемgroupId,artifactId,versionметка для идентификации уникальных координат этой зависимости
<groupId>:企业网址反写+项目名
<artifactId>:项目名-模块名
<version>:当前版本
<groupId>com.juejin.business</groupId>
<artifactId>juejin-image-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
Каковы области применения
Интервьюер 👨: Тег scope часто используется в наших проектах, вы знаете, какие бывают общие области видимости?
Сяо Мин 🤪: Меня это не беспокоит.
Объем нашей обычно используемой области:
compile | test | provided | |
---|---|---|---|
основная программа | √ | x | √ |
тестовая программа | √ | √ | √ |
Участвовать в развертывании | √ | x | x |
- компиляция: допустимы область действия по умолчанию, компиляция, тестирование и запуск.
- при условии: компиляция и тестирование действительны, и окончательный запуск не будет добавлен, например, зависимости tomcat
- время выполнения: допустимо при тестировании и запуске, компиляция не будет добавлена, например, jar драйвера jdbc
- test: действует на этапе тестирования, например junit
- система: соответствует предоставленной, действительна на этапе компиляции и тестирования, но связана с системой, плохая переносимость
- import: объем импорта, он используется только в dependencyManagement, что означает импорт конфигурации зависимостей из других pom
Как передаются зависимости области действия
Интервьюер 👨: Ответ хороший, тогда если проект A зависит от объема проекта B, как предусмотрено, а проект B зависит от объема проекта C как исполняемой среды, то почему в конце концов проект A зависит от объема проекта C?
Сяо Мин 🤪: Объем зависимостей предоставлен, позвольте мне нарисовать картинку, чтобы вы могли видеть
Как исключить зависимости
Интервьюер 👨: После того, как мы введем много зависимостей, велика вероятность конфликтов зависимостей, как вы их решаете?
Сяо Мин 🤪: Успенскаяjuejin-convert-webВ этой зависимости есть конфликт, я решу это так, сначала найдите конфликтующий проект
1 - пройтиexclusionsРеализация ярлыка. Конфликтующие зависимости проектаjuejin-image-webВ ходе проекта активно исключать пройденноеjuejin-convert-webзависимости проекта
<dependency>
<groupId>com.juejin.business</groupId>
<artifactId>juejin-image-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.juejin.business</groupId>
<artifactId>juejin-convert-web</artifactId>
</exclusion>
</exclusions>
</dependency>
2- пройтиoptionalвыполнить
Исправлятьjuejin-image-webpom.xml проекта:
<dependency>
<groupId>com.juejin.business</groupId>
<artifactId>juejin-convert-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
Принцип транзитивности зависимостей
Интервьюер 👨: Кажется, вы имеете некоторое представление о переносе зависимостей Maven, можете подробно рассказать о принципе переноса зависимостей Maven.
Сяо Мин 🤪: Есть два принципа переноса зависимостей Maven.принцип кратчайшего путиВторой моментпринцип первого заявления
привести пример
a->b->c(2.0)
a->c(1.0)
Наконец, возьмем версию c(1.0), потому что она короткая.
Еще один пример, иллюстрирующий второй принцип
a->b->c(2.0)
a->d->c(1.0)
Поскольку b сначала объявляет о введении c, поэтому возьмем c(2.0)
Конечно, если мы напрямую зависим от c в a, то это должна быть версия c, от которой зависит наш проект a, принцип близких родственников
Жизненный цикл Мавена
Интервьюер 👨: У Maven есть три независимых жизненных цикла, а именно:Clean LifecycleСделайте некоторую очистку, прежде чем делать настоящую сборку,Default LifecycleОсновная часть сборки, компиляции, тестирования, упаковки, установки, развертывания и т. д.Site LifecycleСоздавайте отчеты по проектам, сайты, сайты релизов, а на боковой панели идей вы также можете увидеть
Вы расширяете то, что делают эти жизненные циклы?
Сяо Мин 🤪: Хорошо
clean 移除所有上一次构建生成的文件
validate:验证工程是否正确,所有需要的资源是否可用
compile:编译项目的源代码
test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
package:把已编译的代码打包成可发布的格式,比如 jar、war 等。
verify:运行所有检查,验证包是否有效且达到质量标准。
install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用
site 生成项目的站点文档
deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享
Произвольно определите номер версии стороннего пакета в подпроекте
Интервьюер 👨: Один из наших новых стажеров произвольно определил номер версии стороннего пакета в подпроекте, как вы думаете, подходит ли он?
Сяомин🤪: Не подходит, потому что, когда мы совместно разрабатываем одно и то же приложение, если все будут произвольно изменять номер версии стороннего пакета, будут конфликты при слиянии веток, а проекты, которые ссылаются на этот второй- партийный пакет обязательно будет конфликтовать. ,
Поэтому управление версиями наших пакетов передано в основной POM, и запрещается отдельно объявлять сторонние пакеты для выпуска или зависимости в подпроектах.
Интервьюер 👨: Неплохо, парень, приходи завтра на работу
Сяо Мин 🤪: хорошо
В конце статьи, если эта статья была вам полезна, поставьте лайк
Если вы хотите узнать больше о обмене, вы можете обратить внимание на общедоступный номер
Ответив на «Информацию» на официальном аккаунте, вы сможете получить вопросы для интервью/технические документы/электронные книги и т.д.
Рекомендовано в прошлом
Простое понимание режима моста за 3 минуты 11 необычных рекомендаций от крупных производителей Заводской шаблон проектирования, вы знаете эти вопросы?