Maven validate - получить каталоги pom дочернего модуля - PullRequest
0 голосов
/ 08 октября 2019

Бизнес-команде за пределами команды разработчиков требуется некоторая информация из репо с контролируемым исходным кодом, в которой мы размещаем исходный код. Мы используем Maven для выполнения наших сборок и используем Git для контроля исходного кода. Я хочу получить порядок сборки реактора и вставить его в скрипт, чтобы автоматизировать поиск в Git, чтобы предоставить бизнес-команде то, что им нужно, но мне нужно убедиться, что я говорю Git искать соответствующие каталоги (и не только корневой каталог всего репо).

Так что, очевидно, я могу сделать что-то вроде mvn validate, чтобы предоставить мне:

foo> mvn validate
[INFO] Reactor Build Order:
[INFO]
[INFO] foo
[INFO] sub_foo_1
[INFO] sub_foo_2
...

За исключением того, что у меня нет возможности взять это ипередайте это Git для получения дополнительной информации, потому что я не знаю, в каких каталогах находится какой-либо из дочерних модулей.

Можно ли как-нибудь найти путь к отдельным файлам pom, которые являются частьюпорядок сборки реактора?

1 Ответ

0 голосов
/ 08 октября 2019

Я публикую это как ответ, но это не было бы моим первым выбором;надеясь, что у кого-то будет что-то лучше. Я действительно надеялся, что есть собственный способ Maven сделать [что-то вроде] этого.

По сути, я создал небольшой плагин для распечатки информации.

Пом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <groupId>foo.bar.baz.demo</groupId>
    <version>1.2.3-SNAPSHOT</version>
    <artifactId>test_plugin</artifactId>
    <packaging>maven-plugin</packaging>
    <modelVersion>4.0.0</modelVersion>


    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.4</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-project</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>
</project>

Код:

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.project.MavenProject;

@Mojo(name = "print_pom_dir")
public class TestMojo extends AbstractMojo {
    public void execute() throws MojoExecutionException {
        MavenProject object = (MavenProject) this.getPluginContext()
                .get("project");
        getLog().info(
                "Pom directory: " + object.getBasedir().getAbsolutePath());
    }
}

Где я могу поместить выполнение сборки в родительский объект, например:

<build>
    <plugins>
        <plugin>
            <groupId>foo.bar.baz.demo</groupId>
            <version>1.2.3-SNAPSHOT</version>
            <artifactId>test_plugin</artifactId>
        </plugin>
    </plugins>
</plugins>

Таким образом, все дочерние модули наследуют его.

Тогда все, что мне нужно сделать, это запустить mvn foo.bar.baz.demo:test_plugin:1.2.3-SNAPSHOT:print_pom_dir из корневого модуля, и stdout получает мои данные для моего регулярного выражения.

Интересно, может быть, запись в файл или что-то в целевой области может быть чище? , но я не слишком ясно представляю лучшие практики для Maven и то, является ли стандартным изменение целевого каталога для чего-либо, не связанного со сборкой, или как получить root, чтобы узнать о выводе всех дочерних исполнений плагина дляэто важно.

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