web-dev-qa-db-ja.com

効果的です-スーパーpomとアプリケーションPOMのマージ

Mvn help:effective-pomコマンドを使用して、サンプルアプリケーションで効果的なpomを生成しようとしました。 http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom.html この記事では、効果的なpomはスーパーpomとアプリケーションpomのマージであると述べています。

しかし、私の有効なpomを見ると、スーパーpomにも有効なpomにも含まれていない要素が含まれています。

何が効果的なpomに入るかを決定する他の要因はありますか?.

以下にスーパーpomとアプリケーションpomを示します。これらのpomには両方ともmavne-jar-pluginまたはmaven-compiler-pluginがありませんが、私の実効pomでは、ビルドセクションでこれらのプラグインを確認できます。では、どのように追加されるのでしょうか。

この問題を明確にするための助けを事前に感謝します

スーパーPOM

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    http://www.Apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!-- START SNIPPET: superpom -->
<project>
  <modelVersion>4.0.0</modelVersion>

  <repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.Apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.Apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

  <build>
    <directory>${project.basedir}/target</directory>
    <outputDirectory>${project.build.directory}/classes</outputDirectory>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
    <sourceDirectory>${project.basedir}/src/main/Java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/Java</testSourceDirectory>
    <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>${project.basedir}/src/test/resources</directory>
      </testResource>
    </testResources>
    <pluginManagement>
      <!-- NOTE: These plugins will be removed from future versions of the super POM -->
      <!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-Assembly-plugin</artifactId>
          <version>2.2-beta-5</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <reporting>
    <outputDirectory>${project.build.directory}/site</outputDirectory>
  </reporting>

  <profiles>
    <!-- NOTE: The release profile will be removed from future versions of the super POM -->
    <profile>
      <id>release-profile</id>

      <activation>
        <property>
          <name>performRelease</name>
          <value>true</value>
        </property>
      </activation>

      <build>
        <plugins>
          <plugin>
            <inherited>true</inherited>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <inherited>true</inherited>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <inherited>true</inherited>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
              <updateReleaseInfo>true</updateReleaseInfo>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
<!-- END SNIPPET: superpom -->

アプリケーションPOM

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.sonatype.mavenbook.ch08</groupId>
    <artifactId>simplest-project</artifactId>
    <packaging>jar</packaging>
    <version>1</version>
</project>

効果的なpom

15
KItis

有効なPOMは、スーパーPOM +アプリケーションPOM + settings.xmlコンテンツ+選択したパッケージタイプに基づいて(したがって、アプリケーションPOMの1つの要素に基づいて)デフォルトでライフサイクルにバインドされたプラグインで構成されます。

maven-jar-pluginmaven-compiler-pluginについて質問されました。アプリケーションのPOMがjarパッケージを指定しているため、これらはデフォルトでライフサイクルにバインドされています。

デフォルトのバインディングは、$YOUR_REPO_LOCATION\org\Apache\maven\maven-core\3.0.x\maven-core-3.0.x.jar\META-INF\plexus\components.xmlまたは ドキュメント で確認できます。

21
user944849

私の記憶が正しければ、有効なPOMとは実際に使用されるPOMを意味します。

スーパーPOMに設定を組み込むことはその一部です。また、親POMの適用、プロファイルの適用、プロパティの置換など、他にも多くのことが含まれます。

どこから来たのかを特定できるように、どこから来たのかと思った設定の抜粋を提供できればもっと良いと思います。

3
Adrian Shum