Maven: как указать, какой плагин сборки выполняется

У меня есть pom с несколькими сборками. Когда я бегу, например. mvn package, он запускает все исполнения. Как я могу сказать, чтобы он запускал только выполнение foo?

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>foo/id>
                    <phase>package</phase>
                    <goals><goal>single</goal></goals>
                    <configuration>...</configuration>
                </execution>
                <execution>
                    <id>bar</id>
                    <phase>package</phase>
                    <goals><goal>single</goal></goals>
                    <configuration>...</configuration>
                </execution>

То, что у меня есть выше, на мой взгляд, похоже на следующее Makefile:

all: foo bar

foo:
    ... build foo ...

bar:
    ... build bar ...

Я могу запустить make all или просто make, чтобы построить все, или я могу запустить make foo или make bar, чтобы построить отдельные цели. Как я могу добиться этого с помощью Maven?


person David Phillips    schedule 16.08.2011    source источник


Ответы (3)


Вам нужно использовать профили, вот pom.xml пример:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>FooBar</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <profiles>

        <profile>
            <id>Foo</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                        <execution>
                            <id>foo/id>
                            <phase>package</phase>
                            <goals><goal>single</goal></goals>
                            <!-- configuration>...</configuration -->
                        </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>Bar</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                        <execution>
                            <id>Bar</id>
                            <phase>package</phase>
                            <goals><goal>single</goal></goals>
                            <!-- configuration>...</configuration -->
                        </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

    </profiles>

</project>

И вы бы вызывали maven следующим образом:

mvn package -P Foo  // Only Foo
mvn package -P Bar  // Only Bar
mvn package -P Foo,Bar // All (Foo and Bar)
person Jérôme Verstrynge    schedule 25.08.2011

Мой Maven немного заржавел, но я думаю, вы можете сделать это несколькими способами:

1) Используйте профили. Укажите профиль в командной строке с помощью «maven -PprofileName».

2) Разбейте свои исполнения на отдельные этапы/цели и запускайте только те, которые вам нужны.

person TheCoolah    schedule 16.08.2011

Если вы не хотите, чтобы «бар» работал, не привязывайте его к фазе жизненного цикла. Выполнения плагинов запускаются только тогда, когда они привязаны к фазе, и эта фаза выполняется как часть сборки. Как предположил TheCoolah, профили — это один из способов управления, когда выполнение привязано к фазам жизненного цикла, а когда нет.

person Ryan Stewart    schedule 17.08.2011