Skip to content

Commit a08cf6e

Browse files
committed
HBASE-30272 Compatiblity checker can not compile rel/2.0.0 when releasing 3.0.0-beta-2 (#8451)
Signed-off-by: Xiao Liu <liuxiaocs@apache.org> (cherry picked from commit 448bd24)
1 parent bb836b5 commit a08cf6e

1 file changed

Lines changed: 42 additions & 4 deletions

File tree

dev-support/checkcompatibility.py

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import urllib.request
4545
import urllib.error
4646
import urllib.parse
47+
import xml.etree.ElementTree as xml
4748
from collections import namedtuple
4849
try:
4950
import argparse
@@ -135,7 +136,33 @@ def get_repo_name(remote_name="origin"):
135136
return remote[:-4] if remote.endswith(".git") else remote
136137

137138

138-
def build_tree(java_path, verbose):
139+
def select_java_home(java_path, java8_home, java17_home):
140+
pom = xml.parse(os.path.join(java_path, "pom.xml"))
141+
root = pom.getroot()
142+
ns = ""
143+
if root.tag.startswith("{"):
144+
ns = root.tag.split("}")[0] + "}" # e.g. "{http://maven.apache.org/POM/4.0.0}"
145+
version_elem = root.find(f"{ns}version")
146+
if version_elem is not None and version_elem.text:
147+
version = version_elem.text.strip()
148+
else:
149+
raise ValueError("Could not find project version")
150+
if version == "${revision}":
151+
properties_elem = root.find(f"{ns}properties")
152+
if properties_elem is None:
153+
raise ValueError("Could not find properties")
154+
revision_elem = properties_elem.find(f"{ns}revision")
155+
if revision_elem is not None and revision_elem.text:
156+
version = revision_elem.text.strip()
157+
else:
158+
raise ValueError("Could not find project revision")
159+
if version.startswith("3."):
160+
return java17_home
161+
else:
162+
return java8_home
163+
164+
165+
def build_tree(java_path, verbose, java8_home, java17_home):
139166
""" Run the Java build within 'path'. """
140167
logging.info("Building in %s ", java_path)
141168
# special hack for comparing with rel/2.0.0, see HBASE-26063 for more details
@@ -144,7 +171,10 @@ def build_tree(java_path, verbose):
144171
"-Dmaven.javadoc.skip=true", "package"]
145172
if not verbose:
146173
mvn_cmd.insert(-1, "--quiet")
147-
subprocess.check_call(mvn_cmd, cwd=java_path)
174+
env = os.environ.copy()
175+
if java8_home and java17_home:
176+
env["JAVA_HOME"] = select_java_home(java_path, java8_home, java17_home)
177+
subprocess.check_call(mvn_cmd, cwd=java_path, env=env)
148178

149179

150180
def checkout_java_acc(force):
@@ -444,6 +474,14 @@ def main():
444474
parser.add_argument("--skip-build",
445475
action="store_true",
446476
help="Skip building the projects.")
477+
parser.add_argument("--java8_home",
478+
default=None,
479+
help="Path to Java 8 installation. "
480+
"Used for building projects with version < 3.0.")
481+
parser.add_argument("--java17_home",
482+
default=None,
483+
help="Path to Java 17 installation. "
484+
"Used for building projects with version >= 3.0.")
447485
parser.add_argument("--verbose",
448486
action="store_true",
449487
help="more output")
@@ -516,8 +554,8 @@ def main():
516554
if args.skip_build:
517555
logging.info("Skipping the build")
518556
else:
519-
build_tree(src_dir, args.verbose)
520-
build_tree(dst_dir, args.verbose)
557+
build_tree(src_dir, args.verbose, args.java8_home, args.java17_home)
558+
build_tree(dst_dir, args.verbose, args.java8_home, args.java17_home)
521559

522560
# Find the JARs.
523561
src_jars = find_jars(src_dir)

0 commit comments

Comments
 (0)