1515# limitations under the License.
1616
1717require 'fileutils'
18- require 'find'
1918require 'java_buildpack/component/versioned_dependency_component'
2019require 'java_buildpack/jre'
2120require 'java_buildpack/jre/memory/openjdk_memory_heuristic_factory'
@@ -25,7 +24,6 @@ module Jre
2524
2625 # Encapsulates the detect, compile, and release functionality for selecting an OpenJDK-like JRE.
2726 class OpenJDKLike < JavaBuildpack ::Component ::VersionedDependencyComponent
28- include Find
2927
3028 # Creates an instance
3129 #
@@ -35,20 +33,15 @@ def initialize(context)
3533 @component_name = self . class . to_s . space_case
3634 @configuration = context [ :configuration ]
3735 @droplet = context [ :droplet ]
38- @logger = JavaBuildpack ::Logging ::LoggerFactory . instance . get_logger OpenJDKLike
3936
4037 @droplet . java_home . root = @droplet . sandbox
4138 end
4239
4340 # (see JavaBuildpack::Component::BaseComponent#detect)
4441 def detect
45- version = detect_compiled? ( @configuration [ KEY_VERSION ] ) ? compiled_version ( @application . root ) : VERSION_8
46- configuration = { KEY_REPOSITORY_ROOT => @configuration [ KEY_REPOSITORY_ROOT ] ,
47- KEY_VERSION => @configuration [ KEY_VERSION ] [ version ] }
48-
49- @version , @uri = JavaBuildpack ::Repository ::ConfiguredItem . find_item ( @component_name , configuration )
42+ @version , @uri = JavaBuildpack ::Repository ::ConfiguredItem . find_item ( @component_name ,
43+ @configuration )
5044 @droplet . java_home . version = @version
51-
5245 super
5346 end
5447
@@ -60,96 +53,30 @@ def compile
6053
6154 # (see JavaBuildpack::Component::BaseComponent#release)
6255 def release
63- version = detect_compiled? ( @configuration [ KEY_VERSION ] ) ? compiled_version ( @application . root ) : VERSION_8
64-
6556 @droplet . java_opts
6657 . add_system_property ( 'java.io.tmpdir' , '$TMPDIR' )
6758 . add_option ( '-XX:OnOutOfMemoryError' , killjava )
68- . concat memory ( version )
59+ . concat memory
6960 end
7061
7162 private
7263
73- CAFEBABE = 'cafebabe' . freeze
74-
75- KEY_DETECT_COMPILED_VERSION = 'detect_compiled' . freeze
76-
7764 KEY_MEMORY_HEURISTICS = 'memory_heuristics' . freeze
7865
7966 KEY_MEMORY_SIZES = 'memory_sizes' . freeze
8067
81- KEY_REPOSITORY_ROOT = 'repository_root' . freeze
82-
83- KEY_VERSION = 'version' . freeze
84-
85- VERSION_6 = 6 . freeze
86-
87- VERSION_7 = 7 . freeze
88-
89- VERSION_8 = 8 . freeze
90-
91- private_constant :CAFEBABE , :KEY_DETECT_COMPILED_VERSION , :KEY_MEMORY_HEURISTICS , :KEY_MEMORY_SIZES ,
92- :KEY_REPOSITORY_ROOT , :KEY_VERSION , :VERSION_6 , :VERSION_7 , :VERSION_8
93-
94- def class? ( path )
95- File . extname ( path ) == '.class'
96- end
97-
98- def class_file_format ( path )
99- bits = File . open ( path ) . read . unpack ( 'H*' ) [ 0 ]
100- @logger . debug { "Scanning #{ path } : #{ bits [ 0 , 8 ] } /#{ bits [ 14 , 2 ] } " }
101-
102- Integer ( bits [ 14 , 2 ] ) if magic_number? ( bits )
103- end
104-
105- def compiled_version ( root )
106- @logger . debug { 'Detecting compiled version' }
107-
108- versions = find ( root . to_path ) . map do |child |
109- next if File . directory? ( child ) || !class? ( child )
110- class_file_format child
111- end
112-
113- version versions . max_by ( &:to_i )
114- end
115-
116- def detect_compiled? ( configuration )
117- configuration [ KEY_DETECT_COMPILED_VERSION ] == 'enabled'
118- end
68+ private_constant :KEY_MEMORY_HEURISTICS , :KEY_MEMORY_SIZES
11969
12070 def killjava
12171 @droplet . sandbox + 'bin/killjava.sh'
12272 end
12373
124- def magic_number? ( bits )
125- bits [ 0 , 8 ] == CAFEBABE
126- end
127-
128- def memory ( version )
129- sizes = @configuration [ KEY_MEMORY_SIZES ] ? @configuration [ KEY_MEMORY_SIZES ] . clone : { }
130- heuristics = @configuration [ KEY_MEMORY_HEURISTICS ] ? @configuration [ KEY_MEMORY_HEURISTICS ] . clone : { }
131-
132- if version < VERSION_8
133- heuristics . delete 'metaspace'
134- sizes . delete 'metaspace'
135- else
136- heuristics . delete 'permgen'
137- sizes . delete 'permgen'
138- end
139-
74+ def memory
75+ sizes = @configuration [ KEY_MEMORY_SIZES ] || { }
76+ heuristics = @configuration [ KEY_MEMORY_HEURISTICS ] || { }
14077 OpenJDKMemoryHeuristicFactory . create_memory_heuristic ( sizes , heuristics , @version ) . resolve
14178 end
14279
143- def version ( format )
144- if format == 32
145- VERSION_6
146- elsif format == 33
147- VERSION_7
148- else
149- VERSION_8
150- end
151- end
152-
15380 end
15481
15582 end
0 commit comments