4444import urllib .request
4545import urllib .error
4646import urllib .parse
47+ import xml .etree .ElementTree as xml
4748from collections import namedtuple
4849try :
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
150180def 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