← All tasks
javaapache/incubator-seata #8176Not a task: already works

Unify protobuf and gRPC version properties into build/pom.xml and reference them via ${} instead of hardcoding versions

envgap__apache__incubator-seata-8176

01 / FAILURE SIGNATURE

As reported upstream

5. Attempting to downgrade the build with `mvn clean package -Dgrpc.version=1.54.2` still results in `${protobuf.version}` and `${grpc.version}` being unresolvable, with the error:
Not a benchmark task.
  • The project already builds and runs before the fix, so there is nothing to repair.

02 / ENVIRONMENT RECIPE

Base commit
f97462e9e770a9d6cef710a2c64c3460f8b78776
Manifest
build/pom.xml
Reproduce
Awaiting issue-specific recipe
Run under trace
Awaiting a meaningful runtime command

03 / ORIGINAL ISSUE TEXT

apache/incubator-seata #8176 · read the original issue
### Check Ahead

- [x] I have searched the [issues](https://github.com/seata/seata/issues) of this repository and believe that this is not a duplicate.

- [x] I am willing to try to fix this bug myself.


### Ⅰ. Issue Description

When building Seata on the LoongArch architecture, the `protobuf-maven-plugin` is unable to resolve the `protoc-gen-grpc-java` executable.


### Ⅱ. Describe what happened


```shell
[ERROR] Failed to execute goal org.xolstice.maven.plugins:protobuf-maven-plugin:0.6.1:test-compile-custom (default) on project seata-grpc: Unable to resolve artifact: Missing:
[ERROR] ----------
[ERROR] 1) io.grpc:protoc-gen-grpc-java:exe:linux-loongarch_64:1.55.1
[ERROR] 
[ERROR]   Try downloading the file manually from the project website.
[ERROR] 
[ERROR]   Then, install it using the command: 
[ERROR]       mvn install:install-file -DgroupId=io.grpc -DartifactId=protoc-gen-grpc-java -Dversion=1.55.1 -Dclassifier=linux-loongarch_64 -Dpackaging=exe -Dfile=/path/to/file
[ERROR] 
[ERROR]   Alternatively, if you host your own repository you can deploy the file there: 
[ERROR]       mvn deploy:deploy-file -DgroupId=io.grpc -DartifactId=protoc-gen-grpc-java -Dversion=1.55.1 -Dclassifier=linux-loongarch_64 -Dpackaging=exe -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
[ERROR] 
[ERROR]   Path to dependency: 
[ERROR]         1) org.apache.seata:seata-grpc:jar:2.8.0-SNAPSHOT
[ERROR]         2) io.grpc:protoc-gen-grpc-java:exe:linux-loongarch_64:1.55.1
[ERROR] 
[ERROR] ----------
[ERROR] 1 required artifact is missing.
[ERROR] 
[ERROR] for artifact: 
[ERROR]   org.apache.seata:seata-grpc:jar:2.8.0-SNAPSHOT
```

<img width="2092" height="1230" alt="Image" src="https://github.com/user-attachments/assets/7d0b943b-c5ab-42b9-96e5-a40b23336ef9" />

### Ⅲ. Describe what you expected to happen

Seata should build successfully on the LoongArch architecture, or it should be possible to work around this issue by specifying protobuf/gRPC version parameters to use lower versions (such as protobuf 3.25.4 and gRPC 1.54.2) available in the LoongArch Maven repository.


### Ⅳ. How to reproduce it (as minimally and precisely as possible)


1. Clone the Seata repository on a LoongArch machine
2. Run `mvn clean package`
3. The build fails at the `seata-grpc` module

**Root Cause Analysis:**

1. The Maven Central repository does not contain the `protoc-gen-grpc-java` executable for the LoongArch architecture
2. The LoongArch Maven repository (https://maven.loongnix.cn/loongarch/maven/) has `io.grpc:protoc-gen-grpc-java` up to version 1.54.2 only, which does not meet the required version 1.55.1
3. The version numbers `3.25.4` (protobuf) and `1.55.1` (gRPC) are hardcoded in multiple places in the code:
   ```
   ./core/pom.xml:  com.google.protobuf:protoc:3.25.4:exe:${os.detected.classifier}
   ./test-suite/test-new-version/pom.xml:  com.google.protobuf:protoc:3.25.4:exe:${os.detected.classifier}
   ./test-suite/test-new-version/pom.xml:  io.grpc:protoc-gen-grpc-java:1.55.1:exe:${os.detected.classifier}
   ./serializer/seata-serializer-protobuf/pom.xml:  com.google.protobuf:protoc:3.25.4:exe:${os.detected.classifier}
   ./dependencies/pom.xml:  <protobuf.version>3.25.5</protobuf.version>
   ./dependencies/pom.xml:  <grpc.version>1.55.1</grpc.version>
   ./extensions/rpc/seata-grpc/pom.xml:  com.google.protobuf:protoc:3.25.4:exe:${os.detected.classifier}
   ./extensions/rpc/seata-grpc/pom.xml:  <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.55.1:exe:${os.detected.classifier}</pluginArtifact>
   ```

    <img width="1448" height="146" alt="Image" src="https://github.com/user-attachments/assets/f2ec49dd-3826-4704-a666-818cc34b06d2" />

4. `<protobuf.version>3.25.5</protobuf.version>` and `<grpc.version>1.55.1</grpc.version>` are defined in `./dependencies/pom.xml`, but there is no parent-child relationship between it and `./extensions/rpc/seata-grpc/pom.xml` (or other sub-modules), so `${protobuf.version}` and `${grpc.version}` cannot be resolved in the `seata-grpc` module and other sub-modules
5. Attempting to downgrade the build with `mvn clean package -Dgrpc.version=1.54.2` still results in `${protobuf.version}` and `${grpc.version}` being unresolvable, with the error:
   ```
   Downloading from nexus-settings: .../io/grpc/protoc-gen-grpc-java/$%7Bgrpc.version%7D/protoc-gen-grpc-java-$%7Bgrpc.version%7D.pom
   ```

    <img width="1644" height="91" alt="Image" src="https://github.com/user-attachments/assets/e4030c80-4a75-4b00-9f94-b57a16f38c28" />

**Root Cause:** The `<protobuf.version>` and `<grpc.version>` properties are defined in `./dependencies/pom.xml`, but this POM has no parent-child relationship with the `seata-grpc` module (their common parent is `org.apache.seata:seata-build`), so the properties cannot be inherited and used.


### Ⅴ. Anything else we need to know?

_No response_

### Ⅵ. Environment

- Seata client/server version: 2.8.0-SNAPSHOT
- OS: Linux (LoongArch)
Continue on GitHub ↗

04 / LABELS

Labels from the report text only; not yet run

No supported category has been assigned.

Label rules and the text that matched
[]