您能帮我理解为什么我无法将我的<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引用。
[我发现,当在父POM中也使用1.6.2
时,使用os-maven-plugin
的os-maven-plugin
版本将正确解析子POM中的操作系统。它要求父POM和子POM都使用此版本,否则将出现相同的错误OS分辨率。