M1版本Mac针对性配置
项目编译报错信息解决方案:
Could not find artifact com.google.protobuf:protoc:exe:osx-aarch_64:3.6.1 in public (http://nexus.xxx.com/repository/maven-public/)
公司项目中使用的是
protobuf
这种协议数据交换格式在所有项目中配置有以下代码的地方都会报错
<configuration> <protocArtifact>com.google.protobuf:protoc:3.6.1:exe:${os.detected.classifier}</protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.19.0:exe:${os.detected.classifier}</pluginArtifact> </configuration>
原因:
M1芯片使用的是最新的
osx-aarch_64
架构,${os.detected.classifier}获取当前系统架构会获取到osx-aarch_64
的exe文件。而nexus私有仓库中没有此版本。从而导致错误!!
如下图所示:私有仓库中版本只有osx-x86_64
处理方案一(不推荐)
把
${os.detected.classifier}
更改为osx-x86_64
.
<configuration>
<protocArtifact>com.google.protobuf:protoc:3.6.1:exe:osx-x86_64</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.19.0:exe:osx-x86_64</pluginArtifact>
</configuration>
处理方案二(推荐)
把
${os.detected.classifier}
获取的架构强制更改为osx-x86_64
,代码不需要更改,在/Users/jarvan/.m2/settings.xml
中增加一个profile
标签和一个activeProfile
标签
<profile>
<id>apple-silicon</id>
<properties>
<os.detected.classifier>osx-x86_64</os.detected.classifier>
</properties>
</profile>
<activeProfiles>
<activeProfile>apple-silicon</activeProfile>
</activeProfiles>
完整配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/Users/jarvan/.m2/repository</localRepository>
<servers>
<server>
<id>snapshots</id>
<username>java-developer</username>
<password>xxx</password>
</server>
<server>
<id>releases</id>
<username>java-developer</username>
<password>xxx</password>
</server>
<server>
<id>public</id>
<username>java-developer</username>
<password>xxx</password>
</server>
</servers>
<mirrors>
<mirror>
<id>public</id>
<name>public</name>
<url>http://nexus.xxx.com/repository/maven-public/</url>
<mirrorOf>public</mirrorOf>
</mirror>
<mirror>
<id>snapshots</id>
<name>snapshots</name>
<url>http://nexus.xxx.com/repository/maven-snapshots/</url>
<mirrorOf>snapshots</mirrorOf>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus Aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>public</id>
<name>Public</name>
<url>http://nexus.xxx.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public</name>
<url>http://nexus.xxx.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>apple-silicon</id>
<properties>
<os.detected.classifier>osx-x86_64</os.detected.classifier>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
<activeProfile>apple-silicon</activeProfile>
</activeProfiles>
</settings>