1111import java .util .Collections ;
1212import java .util .HashMap ;
1313import java .util .List ;
14+ import java .util .ListIterator ;
1415import java .util .Map ;
1516import java .util .Properties ;
1617import java .util .Set ;
@@ -244,14 +245,14 @@ private void writeDebugSourceFile(BuildResult result) {
244245
245246 private void writeArtifactResultMetadataFile (BuildSystemTargetBuildItem outputTargetBuildItem ,
246247 List <ArtifactResultBuildItem > artifactResultBuildItems ) {
247- ArtifactResultBuildItem lastArtifact = artifactResultBuildItems . get (artifactResultBuildItems . size () - 1 );
248+ ArtifactResultBuildItem effectiveArtifact = effectiveArtifact (artifactResultBuildItems );
248249 Path quarkusArtifactMetadataPath = outputTargetBuildItem .getOutputDirectory ().resolve ("quarkus-artifact.properties" );
249250 Properties properties = new Properties ();
250- properties .put ("type" , lastArtifact .getType ());
251- if (lastArtifact .getPath () != null ) {
252- properties .put ("path" , artifactPathForResultMetadata (outputTargetBuildItem , lastArtifact ));
251+ properties .put ("type" , effectiveArtifact .getType ());
252+ if (effectiveArtifact .getPath () != null ) {
253+ properties .put ("path" , artifactPathForResultMetadata (outputTargetBuildItem , effectiveArtifact ));
253254 } else {
254- if (lastArtifact .getType ().endsWith ("-container" )) {
255+ if (effectiveArtifact .getType ().endsWith ("-container" )) {
255256 // in this case we write "path" as to contain the path to the artifact from which the container was built
256257 try {
257258 ArtifactResultBuildItem baseArtifact = artifactResultBuildItems .get (artifactResultBuildItems .size () - 2 );
@@ -264,7 +265,7 @@ private void writeArtifactResultMetadataFile(BuildSystemTargetBuildItem outputTa
264265 }
265266 }
266267 }
267- Map <String , String > metadata = lastArtifact .getMetadata ();
268+ Map <String , String > metadata = effectiveArtifact .getMetadata ();
268269 if (metadata != null ) {
269270 for (Map .Entry <String , String > entry : metadata .entrySet ()) {
270271 properties .put ("metadata." + entry .getKey (), entry .getValue ());
@@ -277,6 +278,18 @@ private void writeArtifactResultMetadataFile(BuildSystemTargetBuildItem outputTa
277278 }
278279 }
279280
281+ private ArtifactResultBuildItem effectiveArtifact (List <ArtifactResultBuildItem > artifactResultBuildItems ) {
282+ ListIterator li = artifactResultBuildItems .listIterator (artifactResultBuildItems .size ());
283+ while (li .hasPrevious ()) {
284+ ArtifactResultBuildItem result = (ArtifactResultBuildItem ) li .previous ();
285+ if ("appCDS" .equals (result .getType ())) {
286+ continue ;
287+ }
288+ return result ;
289+ }
290+ throw new IllegalStateException ("Unable to locate effective artifact" );
291+ }
292+
280293 private static String artifactPathForResultMetadata (BuildSystemTargetBuildItem outputTargetBuildItem ,
281294 ArtifactResultBuildItem artifactResultBuildItem ) {
282295 return outputTargetBuildItem .getOutputDirectory ().relativize (artifactResultBuildItem .getPath ()).toString ();
0 commit comments