Генерация пути артефакта Maven - PullRequest
0 голосов
/ 25 апреля 2018

Maven install знает все артефакты, сгенерированные сборкой, и будет их локально отправлять.

Устанавливает основной артефакт проекта и любые другие артефакты, прикрепленные другими плагинами в жизненном цикле, в локальныйрепозиторий.

плагин справки, вероятно, поддерживает это, но не уверен в правильности выражения

# has all the pieces (artifact, version, type) but is it fair to assume filename will always be that combo?
mvn help:evaluate -Dexpression=project.artifact

Есть ли способ получить этот список путей из команды maven?

Я хочу создать список определенных артефактов, которые будут сохраняться, поскольку артефакт приводит к процессу сборки, без публикации в репозитории Maven.

1 Ответ

0 голосов
/ 25 апреля 2018

Пути артефактов в репозитории Maven будут следовать следующей формуле по умолчанию:

  • groupId разбивается на папки с использованием полных остановок в качестве разделителя, затем artifactId и version образуют последнийдве папки
  • имя файла артефакта состоит из artifactId и version, тип определяется как packaging

Итак, допустим, у вас есть многомодульный проект сmain pom.xml:

<groupId>com.foobar.my.business</group>
<artifactId>myApp</artifactId>
<version>1.0-SNAPSHOT</version>

И у него есть два подмодуля, первый - веб-модуль, который создает конечную точку REST:

<parent>
  <groupId>com.foobar.my.business</group>
  <artifactId>myApp</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myApp-web</artifactId>
<packaging>war</packaging>

Второй - уровень персистентности:

<parent>
  <groupId>com.foobar.my.business</group>
  <artifactId>myApp</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>myApp-persistence</artifactId>
<packaging>jar</packaging>

Допустим, ваш локальный репозиторий найден в ~/.m2/repository.Тогда ваши артефакты будут сохранены в локальном хранилище по адресу:

  • ~ / .m2 / хранилище / com / foobar / my / business / myapp / 1.0-SNAPSHOT / myapp-1.0-SNAPSHOT.pom
  • ~ / .m2 / репозиторий / com / foobar / my / business / myapp-web / 1.0-SNAPSHOT / myapp-web-1.0-SNAPSHOT.pom
  • ~ / .m2 / repository / com/foobar/my/business/myapp-web/1.0-SNAPSHOT/myapp-web-1.0-SNAPSHOT.war
  • ~ / .m2 / repository / com / foobar / my / business / myapp-persistence / 1.0-SNAPSHOT / myapp-persistence-1.0-SNAPSHOT.pom
  • ~ / .m2 / репозиторий / com / foobar / my / business / myapp-persistence / 1.0-SNAPSHOT / myapp-persistence-1.0-SNAPSHOT.jar

Окончательное имя сборки артефакта и местоположение локального хранилища могут быть изменены.Но вы можете использовать следующие выражения, чтобы проверить их:

  • ${settings.localRepository} вернет путь к локальному репозиторию.
  • ${project.build.finalName} вернет окончательное имя артефакта сборки.

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

  • В Windows mvn -q exec:exec -Dexec.executable="cmd" -Dexec.args="/C echo ${settings.localRepository}\${project.groupId}\${project.artifactId}\${project.version}\${project.build.finalName}.${project.packaging}"
  • В POSIX mvn -q exec:exec -Dexec.executable='echo' -Dexec.args='${settings.localRepository}/${project.groupId}/${project.artifactId}/${project.version}/${project.build.finalName}.${project.packaging}'

Тогда вам просто нужно исправить полные остановки в groupId.

Также есть команда mvn dependency:build-classpath, которая покажет расположение каждой зависимости от файловой системы, которая иногда может пригодиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...