Мысль, вызванная упаковкой, оказывается, maven все еще может так играть~

Java

предисловие

Вчера читатель спросил меня о моем опыте работы и случайно задал интересный вопрос, а именно:

"примерно означает": Недавно компания多模块В разработке из-за взаимозависимости модулей очень напрягает каждый раз упаковывать.Паковать надо один за другим по зависимостям.Есть ли способ избавить от неприятностей?

на самом деле игратьMavenВсе мои друзья знают, что проблему можно решить одной командой.

зависимости

Предположим, что есть многомодульный проект, родительский проектPсодержит три подмодуляA,B,C, три модуля имеют следующие зависимости:

  1. AполагатьсяB,C.
  2. BполагатьсяC.
依赖关系图
график зависимости

родительский проектPизpom.xmlследующее:

.....
<modules>
  <module>A</module>
  <module>B</module>
  <module>C</module>
</modules>
.....

Aмодульныйpom.xmlследующее:

....
<dependency>
  <groupId>xxx.xxxx</groupId>
  <artifactId>B</artifactId>
  <version>xxxx</version>
</dependency>
.....

Bмодульныйpom.xmlследующее:

....
<dependency>
  <groupId>xxx.xxxx</groupId>
  <artifactId>C</artifactId>
  <version>xxxx</version>
</dependency>
.....

Cмодульныйpom.xmlследующее:

....

Что вы будете делать?

Теперь продукт должен выйти в интернетA, как вы его упаковываете?

Самое простое, что можно придумать, это упаковать их отдельно и выполнить следующие команды:

mvn clean install C
mvn clean install B
mvn clean package A

Вышеупомянутые три модуля упаковываются по очереди, и это занимает не менее пяти минут, не так ли?

慌的一批
группа паники

Дело в том, что для его упаковки мне нужна только следующая команда:

mvn clean package -pl A -am -P test -DskipTests=true

Есть ли что-то глубокое в приведенной выше команде?-Pукажите среду,-DskipTests=trueпропустить тест, но-plа также-amчто это?

Ответ определенно-plа также-amэти два параметра.

Обязательные параметры

Из приведенных выше примеров важно знать, что-plа также-amЧто означают эти два параметра? следующее:

параметр иллюстрировать
-pl Необязательно, укажите проекты для обработки, несколько через запятую, значение равноartifactId
-am Необязательно, также обработайте параметр pl, чтобы указать зависимые модули модуля.
-amd Необязательно, также обрабатывайте модули, зависящие от модуля, указанного параметром pl.
-N необязательный, означает, что подмодули не рекурсивны

Как это, понимаете? Не слишком ли это непонятно, ха-ха....

what?
what?

Не волнуйтесь, давайте разберемся с этим через несколько команд (все в родительском проектеPзапускать в корневом каталоге).

  1. mvn clean install -pl A -am

работает на родительскомP, подмодульAа такжеAзависит от модуляB,Cвыполнение модуляmvn clean installработать.

После успешного выполнения этой команды вы можете увидетьP,A,B,CВсе четыре модуля устанавливаются локально.

  1. mvn clean install -pl C -am

работает на родительскомP, подмодульCвыполнение модуляmvn clean installработать.

После успешного выполнения этой команды вы можете увидетьP,CОба модуля устанавливаются локально.

так какCмодуль"не зависеть от"два других подмодуля, поэтомуA,BМодуль не будет выполнять соответствующую команду.

  1. mvn clean install -pl C -amd

работает на родительскомP, подмодульCи зависит отCмодуль БC模块执行операция чистой установки mvn.

После успешного выполнения этой команды вы можете увидетьP,A,B,CВсе четыре модуля устанавливаются локально.

  1. mvn clean install -N

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

Как насчет этого? Это следует понимать под приведенной выше командой.

Суммировать

По мере того, как размер проекта будет постепенно расти, не только вышеуказанные модули, но и изучение вышеуказанных команд увеличат эффективность более чем в два раза.