来自父POM的Maven插件管理变量绑定

问题描述 投票:4回答:1

您能帮我理解为什么我无法将我的<pluginMangement>配置放在我的父POM上吗?

我有此<pluginMangement>配置。当它在父POM中时,我的构建失败因为<pluginArtifact>错误地解析为:

io.grpc:protoc-gen-grpc-java:1.23.0:exe:linux-x86_64

当它在我的POM中时,<pluginArtifact>正确解析为

io.grpc:protoc-gen-grpc-java:1.23.0:exe:osx-x86_64

在我的本地POM中,我使用此构建扩展名:

<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.5.0.Final</version>
        </extension>
    </extensions>

<pluginMangement>配置

(注意动态<pluginArtifact>

<build>
  <pluginManagement>
    <plugins>
  <plugin>
  <!-- http://os72.github.io/protoc-jar-maven-plugin/run-mojo.html -->
  <groupId>com.github.os72</groupId>
  <artifactId>protoc-jar-maven-plugin</artifactId>
  <version>${protoc-jar-maven-plugin.version}</version>
  <executions>
      <execution>
          <id>generate-sources</id>
          <phase>generate-sources</phase>
          <goals>
              <goal>run</goal>
          </goals>
          <configuration>
              <addProtoSources>all</addProtoSources>
              <includeMavenTypes>direct</includeMavenTypes>
              <includeMavenTypes>transitive</includeMavenTypes>
              <includeDirectories>
                  <include>src/main/proto</include>
              </includeDirectories>
              <inputDirectories>
                  <include>src/main/proto</include>
              </inputDirectories>
              <protocArtifact>
                  com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
              </protocArtifact>
              <outputTargets>
                  <outputTarget>
                      <type>java</type>
                  </outputTarget>
                  <outputTarget>
                      <type>grpc-java</type>
                      <pluginArtifact>
                          io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
                      </pluginArtifact>
                  </outputTarget>
              </outputTargets>
          </configuration>
      </execution>
  </executions>
</plugin>

在父级上进行配置时,os.detected.classifier在构建开始时显示正确:

[INFO] ------------------------------------------------------------------------
[INFO] Detecting the operating system and CPU architecture
[INFO] ------------------------------------------------------------------------
[INFO] os.detected.name: osx
[INFO] os.detected.arch: x86_64
...
[INFO] os.detected.classifier: osx-x86_64

但是随后插件显示为解决了不正确的工件:

[INFO] --- protoc-jar-maven-plugin:3.8.0:run (generate-sources) @ recipe-order-processor ---
[INFO] Resolving artifact: com.google.protobuf:protoc:3.9.0:exe:linux-x86_64, platform: osx-x86_64

[我怀疑问题是由于绑定了托管插件上的继承变量而导致的,但是我找不到关于父POM上<pluginMangement>的“绑定顺序”的任何Apache Maven引用。

java maven plugins maven-plugin grpc-java
1个回答
0
投票

[我发现,当在父POM中也使用1.6.2时,使用os-maven-pluginos-maven-plugin版本将正确解析子POM中的操作系统。它要求父POM和子POM都使用此版本,否则将出现相同的错误OS分辨率。

© www.soinside.com 2019 - 2024. All rights reserved.