Co to jest pluginManagement w Pom Mavena.xml?

To fragment mojego pliku pom.

....
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

Używam go z powodzeniem za pomocą polecenia

mvn install

Ale kiedy próbuję załączyć go do tagu "pluginManagement", maven-dependency-plugin przestaje działać, gdy uruchamiam cel install. Dlaczego znacznik "pluginManagement"zmienia zachowanie budowania? A może powinienem użyć innego celu lub opcji?

Author: zb226, 2012-05-07

5 answers

Musisz jeszcze dodać

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>

W Twojej kompilacji, ponieważ pluginManagement jest tylko sposobem na współdzielenie tej samej konfiguracji wtyczki we wszystkich modułach projektu.

Z Dokumentacji Mavena:

PluginManagement : jest elementem widocznym wzdłuż bocznych wtyczek. Plugin Management zawiera elementy plugin w taki sam sposób, z tym wyjątkiem, że zamiast konfigurowania informacji plugin dla tego konkretnego projektu budować, jest przeznaczony do skonfigurowania projektu buduje, że / align = "left" / Jednak to tylko konfiguruje wtyczki, które są faktycznie odwołuje się w elemencie wtyczki w dzieci. Dzieci mają pełne prawo do nadpisania definicji zarządzania wtyczkami.

 312
Author: jordeu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 15:08:00

Różnica między <pluginManagement/> i <plugins/> jest taka, że <plugin/> Pod:

  • <pluginManagement/> definiuje Ustawienia wtyczek, które będą dziedziczone przez moduły w Twojej kompilacji. Jest to idealne rozwiązanie w przypadku, gdy masz macierzysty plik pom.

  • <plugins/> jest sekcją do rzeczywistego wywołania wtyczek. Może być dziedziczona od <pluginManagement/>.

Nie musisz mieć <pluginManagement/> w swoim projekcie, jeśli nie jest to rodzic POM. Jeśli jednak jest to rodzic pom, następnie w pom dziecka musisz mieć deklarację w stylu:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

Zauważ, że nie definiujesz żadnej konfiguracji. Możesz dziedziczyć go po rodzicu, chyba że musisz dalej dostosować swoje wywołanie zgodnie z potrzebami projektu dziecka.

Aby uzyskać bardziej szczegółowe informacje, możesz sprawdzić:

 283
Author: carlspring,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-15 22:45:02

Używasz pluginManagement w parent pom, Aby skonfigurować go na wypadek, gdyby jakikolwiek child pom chciał go użyć, ale nie każda wtyczka potomna chce go używać. Przykładem może być to, że super pom definiuje niektóre opcje wtyczki Maven Javadoc.

Nie każdy child pom może chcieć używać Javadoc, więc definiujesz te wartości domyślne w sekcji pluginManagement. Pom potomny, który chce używać wtyczki Javadoc, po prostu definiuje sekcję wtyczki i odziedziczy konfigurację z definicji pluginManagement W parent pom.

 41
Author: Wim Deblauwe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-17 10:13:16

PluginManagement: jest elementem widocznym wzdłuż bocznych wtyczek. Plugin Management zawiera elementy plugin w taki sam sposób, z tym wyjątkiem, że zamiast konfigurowania informacji o wtyczce dla tego konkretnego projektu build, jest przeznaczony do skonfigurowania projektów buduje, które dziedziczą z tego. Jednak to tylko konfiguruje wtyczki, które są faktycznie odwołuje się w elemencie wtyczki w dzieci. Dzieci mają pełne prawo do obejścia zarządzania wtyczką definicje.

Z http://maven.apache.org/pom.html#Plugin%5FManagement

Skopiowane z:

Maven2-problem z pluginManagement i relacją rodzic-dziecko

 3
Author: ant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:02

Więc jeśli dobrze zrozumiałem, powiedziałbym, że <pluginManagement> podobnie jak <dependencyManagement> są używane do współdzielenia tylko konfiguracji między rodzicem a jego podmodułami.

W tym celu definiujemy wspólne konfiguracje zależności i wtyczki w projekcie nadrzędnym, a następnie musimy zadeklarować zależność / wtyczkę w podmodułach, aby z niej korzystać, bez konieczności definiowania konfiguracji dla niej (tj. Wersja lub wykonanie, cele, itp.). Chociaż nie uniemożliwia nam to nadpisania konfiguracji w submodule.

W przeciwieństwie <dependencies> i {[3] } są dziedziczone wraz z ich konfiguracjami i nie powinny być ponownie zgłaszane w podmodułach, w przeciwnym razie wystąpiłby konflikt.

Czy to prawda ?
 0
Author: velocity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-06 13:45:32