Интервьюер на самом деле подрался со мной Мейвен

Java задняя часть
Интервьюер на самом деле подрался со мной Мейвен

введение

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, и запрещается отдельно объявлять сторонние пакеты для выпуска или зависимости в подпроектах.

Интервьюер 👨‍: Неплохо, парень, приходи завтра на работу

Сяо Мин 🤪: хорошо


В конце статьи, если эта статья была вам полезна, поставьте лайк

Если вы хотите узнать больше о обмене, вы можете обратить внимание на общедоступный номер

Ответив на «Информацию» на официальном аккаунте, вы сможете получить вопросы для интервью/технические документы/электронные книги и т.д.

微信关注.jpg


Рекомендовано в прошлом

Простое понимание режима моста за 3 минуты 11 необычных рекомендаций от крупных производителей Заводской шаблон проектирования, вы знаете эти вопросы?