Giter Site home page Giter Site logo

jib-extensions's Introduction

Jib Extensions

This repository contains extensions to the Jib Maven and Gradle build plugins.

The Jib Extension Framework enables anyone to easily extend Jib's behavior to their needs. Jib extensions are supported from Jib Maven 2.3.0 and Jib Gradle 2.4.0.

Table of Contents

What Part of Jib Does the Extension Framework Allow to Tweak?

The Container Build Plan originally prepared by Jib plugins. The build plan describes in a declarative way how it plans to build a container image. If you are interested in writing an extension, see Updating Container Build Plan for more details.

Using Jib Plugin Extensions

Maven

  1. Add extensions as dependencies to the Jib <plugin> block in pom.xml.
  2. Specify extension implementation classes with <pluginExtensions> in Jib's <configuration>.

The following example adds and runs the Jib Layer-Filter Extension.

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.4.3</version>

    <!-- 1. have extension classes available on Jib's runtime classpath -->
    <dependencies>
      <dependency>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-layer-filter-extension-maven</artifactId>
        <version>0.3.0</version>
      </dependency>
    </dependencies>

    <configuration>
      ...
      <pluginExtensions>
        <!-- 2. specify extension implementation classes to load -->
        <pluginExtension>
          <implementation>com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension</implementation>
        </pluginExtension>
      </pluginExtensions>
    </configuration>
  </plugin>

When properly configured and loaded, Jib outputs the loaded extensions in the log. When you configure multiple <pluginExtension>s, Jib runs the extensions in the given order.

[INFO] --- jib-maven-plugin:3.4.3:build (default-cli) @ helloworld ---
[INFO] Running extension: com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension

Some extensions may expect you to provide extension-specific user configuration.

  • For extensions that accept simple string properties (map), use <pluginExtension><properties>. For example,
    <pluginExtension>
      <implementation>com.example.ExtensionAcceptingMapConfig</implementation>
      <properties>
        <customFlag>true</customFlag>
        <layerName>samples</layerName>
      </properties>
    </pluginExtension>
  • For extensions that define a complex configuration, use <pluginExtension><configuration implementation=...> (not Jib's <configuration>). Note that the class for the implementation XML attribute should be the extension-supplied configuration class and not the main extension class. For example,
    <pluginExtension>
      <implementation>com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension</implementation>
      <configuration implementation="com.google.cloud.tools.jib.maven.extension.layerfilter.Configuration">
        <filters>
          <filter>
            <glob>**/google-*.jar</glob>
            <toLayer>google libraries</toLayer>
          </filter>
          <filter>
            <glob>/app/libs/in-house-*.jar</glob>
            <toLayer>in-house dependencies</toLayer>
          </filter>
        </filters>
      </configuration>
    </pluginExtension>

Gradle

  1. Have extensions available to the build script (build.gradle) by adding them with buildscript.dependencies at the beginning of the build script.
  2. Configure extension implementation classes with jib.pluginExtensions.

The following example adds and runs the Jib Layer-Filter Extension.

// should be at the top of build.gradle
buildscript {
  dependencies {
    classpath('com.google.cloud.tools:jib-layer-filter-extension-gradle:0.3.0')
  }
}

...

jib {
  ...
  pluginExtensions {
    pluginExtension {
      implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension'
    }
  }
}

When properly configured and loaded, Jib outputs the loaded extensions in the log. When you configure multiple jib.pluginExtensions, Jib runs the extensions in the given order.

Running extension: com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension

Some extensions may expect you to provide extension-specific user configuration.

  • For extensions that accept simple string properties (map), use pluginExtension.properties. For example,
    pluginExtensions {
      pluginExtension {
        implementation = 'com.example.ExtensionAcceptingMapConfig'
        properties = [customFlag: 'true', layerName: 'samples']
      }
    }
  • For extensions that define a complex configuration, use pluginExtension.configuration. For example,
    • Groovy
      pluginExtension {
        implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension'
        configuration {
          filters {
            filter {
              glob = '**/google-*.jar'
              toLayer = 'google libraries'
            }
            filter {
              glob = '/app/libs/in-house-*.jar'
              toLayer = 'in-house dependencies'
            }
          }
        }
      }
    • Kotlin
      pluginExtension {
        implementation = "com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension"
        configuration(Action<com.google.cloud.tools.jib.gradle.extension.layerfilter.Configuration> {
          filters {
            filter {
              glob = "**/google-*.jar"
              toLayer = "google libraries"
            }
            filter {
              glob = "/app/libs/in-house-*.jar"
              toLayer = "in-house dependencies"
            }
          }
        })
      }

Writing Your Own Extensions

It is easy to write an extension! If you have written a useful extension, let us know and we will put a link in this repo under third-party/. Or, consider contributing to this repo. Either way, Jib users will greatly appreciate it!

Project Setup

  1. Create a new Java project and add Jib Maven/Gradle Plugin Extension API to the project dependencies.
    <dependencies>
       <dependency>
         <groupId>com.google.cloud.tools</groupId>
         <artifactId>jib-maven-plugin-extension-api</artifactId>
         <version>0.4.0</version>
         <scope>provided</scope>
       </dependency>
    </dependencies>
    • Gradle: jib-gradle-plugin-extension-api using compileOnly. Also apply java-gradle-plugin (as the Extension API allows you to access the Gradle project being containerized via Gradle API); if your extension does access the Gradle project via Gradle API, ideally you should use a Gradle version that is compatible with what the Jib plugin uses at image building time. (See Version Matrix.)
    plugins {
      id 'java-gradle-plugin'
      ...
    }
    
    dependencies {
      compileOnly 'com.google.cloud.tools:jib-gradle-plugin-extension-api:0.4.0'
    }
  2. Add a text file src/main/resources/META-INF/services/com.google.cloud.tools.jib.maven.extension.JibMavenPluginExtension (Maven) / src/main/resources/META-INF/services/com.google.cloud.tools.jib.gradle.extension.JibGradlePluginExtension (Gradle) and list your classes that implements the Jib Maven/Gradle Plugin Extension API below. See the Maven and Gradle examples.
  3. Implement JibMavenPluginExtension (Maven) / JibGradlePluginExtension (Gradle).

Using Dependency Injection (Maven)

The approach described above uses JDK service loader to create the instance of the extension. With Maven you can alternatively let your extension being created by the Maven dependency injection container. This allows you to inject shared Maven components into you extension to perform more sophisticated tasks.

  1. Instead of src/main/resources/META-INF/services/com.google.cloud.tools.jib.maven.extension.JibMavenPluginExtension, create a text file src/main/resources/META-INF/sisu/javax.inject.Named and list your classes that implements the Jib Maven Plugin Extension API. Maven dependency injection container needs this file to find the classes to consider. See an example file in jib-layer-filter-extension-maven. Alternatively you can use the sisu-maven-plugin to generate this file, as described in the Maven documentation.

  2. Add the @javax.inject.Named and @javax.inject.Singleton annotations to your classes that implement the Jib Maven Plugin Extension API to make it Maven components. Use javax.inject.Inject annotation on fields, constructors or methods to get shared Maven components.

@Named
@Singleton
public class MyExtension implements JibMavenPluginExtension<Configuration> {
  
  // example for injected shared Maven component
  @Inject private ProjectDependenciesResolver dependencyResolver;
}

Updating Container Build Plan

The extension API passes in ContainerBuildPlan, which is the container build plan originally prepared by Jib plugins. The build plan describes in a declarative way how it plans to build a container image.

The class is a Java API for Container Build Plan Specification. The Container Build Plan Specification is a general specification independent of Jib. The Container Build Plan Java API is a light-weight, standalone API implementing the spec, and it is published to Maven Central (jib-build-plan). The Build Plan classes, once instantiated, are all stateless, immutable "value classes" (holding only simple values). You can inspect the values using simple getters, and when you want to "modify" values, use toBuilder() to create new instances.

Defining Extension-Specific Configuration

Sometimes, you may want to make your extension configurable by the extension end-users. See "Using Jib Plugin Extensions" to understand how end-users can provide extra configuration to an extension.

  • Simple string properties (map): the Extension API has a built-in support for end-users passing simple string map. If your extension does not need complex configuration structure, prefer this approach.

  • Complex configuration structure: define your configuration class and have getExtraConfigType() return the class. See the Maven and Gradle examples.

    • Gradle-specific: your configuration class must have a 1-arg constructor accepting a Gradle Project.

Version Matrix

jib-maven-plugin jib-maven-plugin-extension-api
2.5.0 - current 0.4.0
2.3.0 - 2.4.0 0.3.0
jib-gradle-plugin jib-gradle-plugin-extension-api Jib Plugin Runtime Gradle API*
2.5.0 - current 0.4.0 5.2.1
2.4.0 0.3.0 5.2.1

* For example, it is recommended to use Gradle 5.2.1 or only use the API available in 5.2.1 to develop an extension for Jib Gradle 2.5.0.

jib-extensions's People

Contributors

agentmilindu avatar alicejli avatar antonio-tomac avatar chanseokoh avatar elefeint avatar emmileaf avatar jhult avatar joewang1127 avatar jongwooo avatar loosebazooka avatar lqiu96 avatar m-whitaker avatar maciejwalkowiak avatar mpeddada1 avatar pskiwi avatar ryandens avatar stefanocke avatar thomasmey avatar tstavinoha avatar zanmagerl avatar zhumin8 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jib-extensions's Issues

Cause: extension configured but not discovered on Jib runtime classpath: com.google.cloud.tools.jib.gradle.extension.springboot.JibSpringBootExtension

Added JibSpringBootExtension to a Spring Boot 3.1.2 Application as descripted in the docs

Execution fails with

> error running extension 'com.google.cloud.tools.jib.plugins.extension.NullExtension': extension configured but not discovered on Jib runtime classpath: com.google.cloud.tools.jib.gradle.extension.springboot.JibSpringBootExtension

At the top of the gradle script i added

buildscript {
    dependencies {
        classpath('com.google.cloud.tools:jib-spring-boot-extension-gradle:0.1.0')
    }
}

Jib is configured as

jib {
    description """Creates an optimized docker images and push it do nexus
                   Usage: ./gradelew jib -Prepo=<docker-repository> -Pport=<exposedPort>
                  """
    from {
        image = "eclipse-temurin:17-jre"
    }
    to {
        image = "$repository/$project.name:$version"
        tags = ["latest"]
    }
    container {
        workingDirectory = "/"
        ports = [exposedPort]
        container.creationTime = "USE_CURRENT_TIMESTAMP"
        jvmFlags = [
            "-XX:+UseContainerSupport",
            "-XX:InitialRAMPercentage=50",
            "-XX:MaxRAMPercentage=100",
            "-XX:+ExitOnOutOfMemoryError",
            "-Djava.awt.headless=true",
            "-XX:+AlwaysPreTouch",
            "-Djava.security.egd=file:/dev/./urandom"
        ]
        environment = [
            SPRING_OUTPUT_ANSI_ENABLED: "ALWAYS",
            TZ                        : "Europe/Berlin"
        ]
    }
    pluginExtensions { 
        pluginExtension {
            implementation = 'com.google.cloud.tools.jib.gradle.extension.springboot.JibSpringBootExtension'
        }
    }
}

What is missing?

Customize the order of jib filter,Jib filter extensions created layer order is not good

normal,jib create layers for:

libs
classes
resources

this is good layers for thin docker.but,Libs is too big, and there are some jar packages in it that may change frequently, so it is necessary to separate the layers to reflect the role of thin packages;

filter jib extensions is good job,but order is wrong,like this:

libs
classes
resources
new-layer-1
new-layer-2

if we only change some classes and resources.that change very small.but,new layers all need download again.that not good idea.
maybe,we can insert new layer like this

libs
new-layer-1
new-layer-2
classes
resources

use jib extensions like this:

pluginExtensions {
            pluginExtension {
                implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension'
                configuration {
                    filters {
                        filter {
                            glob = '/app/libs/google-*.jar'
                            toLayer = 'google dependencies'
                            after/before = "xxxx"
                        }
                    }
                }
            }
        }

No plugin found for prefix 'native-image' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories

I have a Spring Boot project with v3.1.0 and Java 17 which works fine. I am adding the GraalVM and trying to create the native containerized image. To create the same I am running the below command which results in No plugin found for prefix 'native-image' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories

Command:
mvn native-image:native-image -Dimage=$REPO:$TAG -Djib.container.environment=SPRING_PROFILES_ACTIVE=prod

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.1.0</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.xyz</groupId>
	<artifactId>abc</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>app</name>
	<description>app</description>
	<properties>
		<java.version>17</java.version>
		<apache.poi.ooxml.version>4.1.2</apache.poi.ooxml.version>
    <checkstyle-plugin.version>3.2.0</checkstyle-plugin.version>
    <checkstyle.version>10.5.0</checkstyle.version>
  </properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>${apache.poi.ooxml.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>ooxml-schemas</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springdoc</groupId>
			<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
			<version>2.0.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.graalvm.buildtools</groupId>
				<artifactId>native-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-checkstyle-plugin</artifactId>
				<version>${checkstyle-plugin.version}</version>
				<dependencies>
					<dependency>
						<groupId>com.puppycrawl.tools</groupId>
						<artifactId>checkstyle</artifactId>
						<version>${checkstyle.version}</version>
					</dependency>
				</dependencies>
				<executions>
					<execution>
						<id>checkstyle</id>
						<phase>validate</phase>
						<goals>
							<goal>check</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<configLocation>checkstyle.xml</configLocation>
					<excludes>**/module-info.java,**/target/**/*,**/protocols/**/*</excludes>
					<consoleOutput>true</consoleOutput>
					<failsOnError>true</failsOnError>
					<violationSeverity>warning</violationSeverity>
					<failOnViolation>true</failOnViolation>
					<linkXRef>false</linkXRef>
				</configuration>
			</plugin>
			<plugin>
				<groupId>com.google.cloud.tools</groupId>
				<artifactId>jib-maven-plugin</artifactId>
				<version>3.3.2</version>
				<dependencies>
					<dependency>
						<groupId>com.google.cloud.tools</groupId>
						<artifactId>jib-native-image-extension-maven</artifactId>
						<version>0.1.0</version>
					</dependency>
				</dependencies>
				<configuration>
					<pluginExtensions>
						<pluginExtension>
							<implementation>com.google.cloud.tools.jib.maven.extension.nativeimage.JibNativeImageExtension</implementation>
						</pluginExtension>
					</pluginExtensions>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
 

Is it possible to set jib.pluginExtensions.pluginExtension.implementation via gradle system prop?

I tried adding the following in build.gradle for the com.google.cloud.tools:jib-native-image-extension-gradle:

buildscript {
  dependencies {
    classpath('com.google.cloud.tools:jib-native-image-extension-gradle:0.1.0')
  }
}

I then tried to set the extension at runtime via a system prop e.g.:
-Djib.pluginExtensions.pluginExtension.implementation=com.google.cloud.tools.jib.gradle.extension.nativeimage.JibNativeImageExtension without success.

Goal is to be able to set the native image plugin at runtime instead of in build.gradle so I can toggle it off or on in the pipeline easily for each service.

I would like to be able to set the following via -D properties:

jib {
  pluginExtensions {
    pluginExtension {
        implementation = 'com.google.cloud.tools.jib.gradle.extension.nativeimage.JibNativeImageExtension'
        properties = [
            imageName: "${CI_PROJECT_NAME}"
        ]
    }
  }
}

I tried every option I could and also searched the docs extensively without success.

the generated jar file has wrong name xxx-unspecified-runner.jar

it seems the quarkus plugin generate wrong filename. ie: xxx-unspecified-runner.jar in stead of xxx-runner.jar
what i should have to change to generate good filename?

this is the output of a build:

./gradlew xxx:jib

> Task :xxx:quarkusGenerateCode
preparing quarkus application

> Task :xxx:jib FAILED
Running extension: com.google.cloud.tools.jib.gradle.extension.quarkus.JibQuarkusExtension
Running Quarkus Jib extension

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':xxx:jib'.
> error running extension 'com.google.cloud.tools.jib.gradle.extension.quarkus.JibQuarkusExtension': /home/lfarkas/work/test/java/xxx/build/xxx-runner.jar doesn't exist; did you run the Qaurkus Gradle plugin ('quarkusBuild' task)?

anyway if i rename xxx-unspecified-runner.jar to xxx-runner.jar then the result is working.

In README of jib-native-image-extension-gradle replace version 0.1.0-SNAPSHOT with 0.1.0

For the jib-native-image-extension-gradle extension the following usage at https://github.com/GoogleContainerTools/jib-extensions/tree/master/first-party/jib-native-image-extension-gradle#examples is described:

buildscript {
  dependencies {
    classpath('com.google.cloud.tools:jib-native-image-extension-gradle:0.1.0-SNAPSHOT')
  }
}

When the extension is used like this, the following error occurs:

A problem occurred configuring root project 'spring-boot-3-native'.
> Could not resolve all files for configuration ':classpath'.
   > Could not find com.google.cloud.tools:jib-native-image-extension-gradle:0.1.0-SNAPSHOT.
     Searched in the following locations:
       - https://repo.spring.io/milestone/com/google/cloud/tools/jib-native-image-extension-gradle/0.1.0-SNAPSHOT/maven-metadata.xml
       - https://repo.spring.io/milestone/com/google/cloud/tools/jib-native-image-extension-gradle/0.1.0-SNAPSHOT/jib-native-image-extension-gradle-0.1.0-SNAPSHOT.pom
       - https://plugins.gradle.org/m2/com/google/cloud/tools/jib-native-image-extension-gradle/0.1.0-SNAPSHOT/maven-metadata.xml
       - https://plugins.gradle.org/m2/com/google/cloud/tools/jib-native-image-extension-gradle/0.1.0-SNAPSHOT/jib-native-image-extension-gradle-0.1.0-SNAPSHOT.pom

The reason seems to be that the 0.1.0-SNAPSHOT was not uploaded to any public Gradle repository.

I guess the version in the README.md should be replaced with 0.1.0, so that one can simply copy the code snippet to use the jib-native-image-extension-gradle extension.

Helper method to mock Configurations in tests

(from #5 (comment))

For example, we can write a helper method to mock test configurations.

    Configuration.Filter filter1 = mock(Configuration.Filter.class);
    when(filter1.getGlob()).thenReturn("/filter1");
    when(filter1.getToLayer()).thenReturn("foo");
    Configuration.Filter filter2 = mock(Configuration.Filter.class);
    when(filter2.getGlob()).thenReturn("/filter2");
    when(filter2.getToLayer()).thenReturn("same layer name");
    Configuration.Filter filter3 = mock(Configuration.Filter.class);
    when(filter3.getGlob()).thenReturn("/filter3");
    when(filter3.getToLayer()).thenReturn("bar");
    Configuration.Filter filter4 = mock(Configuration.Filter.class);
    when(filter4.getGlob()).thenReturn("/filter4");
    when(filter4.getToLayer()).thenReturn("same layer name");
    Configuration.Filter filter5 = mock(Configuration.Filter.class);
    when(filter5.getGlob()).thenReturn("/filter5");
    when(filter5.getToLayer()).thenReturn("baz");
    when(config.getFilters())
        .thenReturn(Arrays.asList(filter1, filter2, filter3, filter4, filter5));

NPE/ConcurrentModificationException in JibLayerFilterExtension when building in paralllel large multi-module project

Using jib-maven-plugin 3.4.1 with jib-layer-filter-extension-maven 0.3.0 on large multi-module maven project (350 projects, ~50 of them have jib plugin to do jib:build as part of mvn deploy lifecycle). They all share same base image as same jib plugin configuration coming from root pom file.

Whenever I try to build projects in parallel (mvn deploy -T8) - I get these exceptions:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.google.cloud.tools:jib-maven-plugin:3.4.1:build (docker-push) on project ***: error running extension 'com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension': extension crashed: null
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:840)
Caused by: org.apache.maven.plugin.MojoExecutionException: error running extension 'com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension': extension crashed: null
    at com.google.cloud.tools.jib.maven.BuildImageMojo.execute (BuildImageMojo.java:162)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:840)
Caused by: com.google.cloud.tools.jib.plugins.extension.JibPluginExtensionException: extension crashed: null
    at com.google.cloud.tools.jib.maven.MavenProjectProperties.runPluginExtension (MavenProjectProperties.java:683)
    at com.google.cloud.tools.jib.maven.MavenProjectProperties.runPluginExtensions (MavenProjectProperties.java:621)
    at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.createJibBuildRunnerForRegistryImage (PluginConfigurationProcessor.java:312)
    at com.google.cloud.tools.jib.maven.BuildImageMojo.execute (BuildImageMojo.java:110)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:840)
Caused by: java.util.ConcurrentModificationException
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode (LinkedHashMap.java:756)
    at java.util.LinkedHashMap$LinkedEntryIterator.next (LinkedHashMap.java:788)
    at java.util.LinkedHashMap$LinkedEntryIterator.next (LinkedHashMap.java:786)
    at com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension.determineFinalLayerName (JibLayerFilterExtension.java:277)
    at com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension.extendContainerBuildPlan (JibLayerFilterExtension.java:95)
    at com.google.cloud.tools.jib.maven.MavenProjectProperties.runPluginExtension (MavenProjectProperties.java:675)
    at com.google.cloud.tools.jib.maven.MavenProjectProperties.runPluginExtensions (MavenProjectProperties.java:621)
    at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.createJibBuildRunnerForRegistryImage (PluginConfigurationProcessor.java:312)
    at com.google.cloud.tools.jib.maven.BuildImageMojo.execute (BuildImageMojo.java:110)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:193)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:539)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    at java.lang.Thread.run (Thread.java:840)

The native-image extension does not detect .exe suffix on windows

Here are the commands I ran and the output I got.

./gradlew --no-configuration-cache tracker:nativeCompile
...
./gradlew --no-configuration-cache tracker:jibDockerBuild
...
> Task :tracker:jibDockerBuild FAILED
Running extension: com.google.cloud.tools.jib.gradle.extension.nativeimage.JibNativeImageExtension
Running Jib Native Image extension

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':tracker:jibDockerBuild'.
> error running extension 'com.google.cloud.tools.jib.gradle.extension.nativeimage.JibNativeImageExtension': Native-image executable does not exist or not a file: C:\Users\davir\code\trash\svcs\tracker\build\native\nativeCompile\svcs.tracker
  Did you run the 'native-image:native-image' goal?

The svcs.tracker file indeed does not exit, but its windows counterpart, svcs.tracker.exe exists and should be used instead.

Spring Native

Is there a future plan to integrate the Jib GraalVM Native Image Extension with Spring Native's specific build goals? Specifically, Spring Native can be compile by the user calling $ mvn spring-boot:build-image, instead of using the native-image:native-image goal. It would be very helpful if binaries compiled directly from spring native could be used with jib!

Following the build steps as seen here.

Gradle Quarkus Jib extension crashes with `Path does not start with forward slash (/)` on MacOS

I tried Quarkus extension, but it crash for me on MacOS 10.15.6. Is there any workaround for this?

My project is brand new generated with Quarkus. Command I try to run: gradle quarkusBuild jibDockerBuild.

Quarkus version: 1.7.0.Final
Gradle version: 6.6 (tried also with 6.1.1).
Jib version: 2.5.0

Jib config:

jib {
    container {
        mainClass = 'bogus'  // to suppress Jib warning about missing main class
        jvmFlags = ['-Dquarkus.http.host=0.0.0.0', '-Djava.util.logging.manager=org.jboss.logmanager.LogManager']
        ports = ["8080"]
        user = '1001'
    }
    pluginExtensions {
        pluginExtension {
            implementation = 'com.google.cloud.tools.jib.gradle.extension.quarkus.JibQuarkusExtension'
        }
    }
}

Exception:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':jibDockerBuild'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:205)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:203)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:184)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.api.GradleException: error running extension 'com.google.cloud.tools.jib.gradle.extension.quarkus.JibQuarkusExtension': extension crashed: Path does not start with forward slash (/): 
        at com.google.cloud.tools.jib.gradle.BuildDockerTask.buildDocker(BuildDockerTask.java:161)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:727)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:694)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:568)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:553)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:536)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:276)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:265)
        at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:63)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
        at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:34)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
        at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:153)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:67)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:41)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:192)
        ... 30 more
Caused by: com.google.cloud.tools.jib.plugins.extension.JibPluginExtensionException: extension crashed: Path does not start with forward slash (/): 
        at com.google.cloud.tools.jib.gradle.GradleProjectProperties.runPluginExtension(GradleProjectProperties.java:490)
        at com.google.cloud.tools.jib.gradle.GradleProjectProperties.runPluginExtensions(GradleProjectProperties.java:440)
        at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.createJibBuildRunnerForDockerDaemonImage(PluginConfigurationProcessor.java:136)
        at com.google.cloud.tools.jib.gradle.BuildDockerTask.buildDocker(BuildDockerTask.java:110)
        ... 92 more
Caused by: java.lang.IllegalArgumentException: Path does not start with forward slash (/): 
        at com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath.get(AbsoluteUnixPath.java:45)
        at com.google.cloud.tools.jib.gradle.extension.quarkus.JibQuarkusExtension.readJibConfigurations(JibQuarkusExtension.java:177)
        at com.google.cloud.tools.jib.gradle.extension.quarkus.JibQuarkusExtension.extendContainerBuildPlan(JibQuarkusExtension.java:69)
        at com.google.cloud.tools.jib.gradle.GradleProjectProperties.runPluginExtension(GradleProjectProperties.java:482)
        ... 95 more

Eclipse warning "Invalid plugin configuration" in jib-layer-filter-extension-maven

Is there a way to get rid of these Eclipse warnings?

"Invalid plugin configuration: filters"
"Invalid plugin configuration: createParentDependencyLayers"

The plugin works fine, this is just about these warnings.

Eclipse
Version: 2022-09 (4.25.0)
Build id: 20220908-1902

<pluginExtension>
	<implementation>com.google.cloud.tools.jib.maven.extension.layerfilter.JibLayerFilterExtension</implementation>
	<configuration implementation="com.google.cloud.tools.jib.maven.extension.layerfilter.Configuration">
		<filters>
			<filter>
				<glob>**/to_be_excluded.ext</glob>
			</filter>
		</filters>
		<createParentDependencyLayers>false</createParentDependencyLayers>
	</configuration>
</pluginExtension>

extension configured but not discovered on Jib runtime classpath: com.google.cloud.tools.jib.gradle.extension.ownership.JibOwnershipExtension

I have a multi-project with A being a root project and B and C being a sub project.

I have added the following snippet in the root project's build gradle

buildscript {
    dependencies {
        classpath files ('libs/jib-ownership-extension-gradle-0.1.0.jar')
    }
}

And following code snippet in the B's sub project which is build the docker image

    pluginExtensions {
        pluginExtension {
            implementation = 'com.google.cloud.tools.jib.gradle.extension.ownership.JibOwnershipExtension'
            configuration {
                rules {
                    rule {
                        glob = '/opt/tomcat/webapps/ROOT/**'
                        ownership = '123:123'
                    }
                }
            }
        }
    }

With this, I am getting following error

2021-08-19T11:21:31.540-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Exception is:
2021-08-19T11:21:31.541-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':tca-instinet:jib'.
2021-08-19T11:21:31.541-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:207)
2021-08-19T11:21:31.542-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
2021-08-19T11:21:31.542-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:205)
2021-08-19T11:21:31.543-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:186)
2021-08-19T11:21:31.543-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)
2021-08-19T11:21:31.544-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
2021-08-19T11:21:31.544-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
2021-08-19T11:21:31.544-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
2021-08-19T11:21:31.545-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
2021-08-19T11:21:31.545-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
2021-08-19T11:21:31.546-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
2021-08-19T11:21:31.546-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
2021-08-19T11:21:31.547-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
2021-08-19T11:21:31.547-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409)
2021-08-19T11:21:31.548-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399)
2021-08-19T11:21:31.548-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
2021-08-19T11:21:31.549-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
2021-08-19T11:21:31.549-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
2021-08-19T11:21:31.549-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94)
2021-08-19T11:21:31.550-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
2021-08-19T11:21:31.550-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
2021-08-19T11:21:31.550-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
2021-08-19T11:21:31.551-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:356)
2021-08-19T11:21:31.551-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
2021-08-19T11:21:31.552-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
2021-08-19T11:21:31.552-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
2021-08-19T11:21:31.552-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
2021-08-19T11:21:31.553-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
2021-08-19T11:21:31.553-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
2021-08-19T11:21:31.554-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
2021-08-19T11:21:31.554-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
2021-08-19T11:21:31.555-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
2021-08-19T11:21:31.555-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
2021-08-19T11:21:31.555-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Caused by: org.gradle.api.GradleException: error running extension 'com.google.cloud.tools.jib.plugins.extension.NullExtension': extension configured but not discovered on Jib runtime classpath: com.google.cloud.tools.
jib.gradle.extension.ownership.JibOwnershipExtension
2021-08-19T11:21:31.556-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.cloud.tools.jib.gradle.BuildImageTask.buildImage(BuildImageTask.java:166)
2021-08-19T11:21:31.556-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
2021-08-19T11:21:31.557-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
2021-08-19T11:21:31.557-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
2021-08-19T11:21:31.557-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
2021-08-19T11:21:31.558-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:726)
2021-08-19T11:21:31.558-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:693)
2021-08-19T11:21:31.559-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:569)
2021-08-19T11:21:31.559-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:395)
2021-08-19T11:21:31.560-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:387)
2021-08-19T11:21:31.561-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
2021-08-19T11:21:31.561-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
2021-08-19T11:21:31.562-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
2021-08-19T11:21:31.562-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:84)
2021-08-19T11:21:31.563-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
2021-08-19T11:21:31.564-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:554)
2021-08-19T11:21:31.564-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:537)
2021-08-19T11:21:31.564-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:108)
2021-08-19T11:21:31.565-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:278)
2021-08-19T11:21:31.565-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:267)
2021-08-19T11:21:31.566-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
2021-08-19T11:21:31.566-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
2021-08-19T11:21:31.566-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
2021-08-19T11:21:31.567-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:67)
2021-08-19T11:21:31.567-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
2021-08-19T11:21:31.568-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
2021-08-19T11:21:31.568-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
2021-08-19T11:21:31.568-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
2021-08-19T11:21:31.569-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
2021-08-19T11:21:31.569-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
2021-08-19T11:21:31.570-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:34)
2021-08-19T11:21:31.571-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
2021-08-19T11:21:31.572-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
2021-08-19T11:21:31.572-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
2021-08-19T11:21:31.573-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
2021-08-19T11:21:31.573-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:159)
2021-08-19T11:21:31.574-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:72)
2021-08-19T11:21:31.575-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:43)
2021-08-19T11:21:31.575-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
2021-08-19T11:21:31.576-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
2021-08-19T11:21:31.576-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
2021-08-19T11:21:31.577-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
2021-08-19T11:21:31.578-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
2021-08-19T11:21:31.578-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
2021-08-19T11:21:31.579-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
2021-08-19T11:21:31.579-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
2021-08-19T11:21:31.580-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
2021-08-19T11:21:31.580-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
2021-08-19T11:21:31.581-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
2021-08-19T11:21:31.582-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
2021-08-19T11:21:31.582-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
2021-08-19T11:21:31.583-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
2021-08-19T11:21:31.583-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
2021-08-19T11:21:31.583-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
2021-08-19T11:21:31.584-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
2021-08-19T11:21:31.585-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
2021-08-19T11:21:31.585-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
2021-08-19T11:21:31.586-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
2021-08-19T11:21:31.586-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
2021-08-19T11:21:31.586-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
2021-08-19T11:21:31.587-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
2021-08-19T11:21:31.588-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
2021-08-19T11:21:31.588-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:194)
2021-08-19T11:21:31.589-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:186)
2021-08-19T11:21:31.590-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)
2021-08-19T11:21:31.590-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
2021-08-19T11:21:31.591-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
2021-08-19T11:21:31.591-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
2021-08-19T11:21:31.592-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
2021-08-19T11:21:31.592-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
2021-08-19T11:21:31.593-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
2021-08-19T11:21:31.593-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
2021-08-19T11:21:31.593-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
2021-08-19T11:21:31.594-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409)
2021-08-19T11:21:31.594-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399)
2021-08-19T11:21:31.595-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
2021-08-19T11:21:31.595-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
2021-08-19T11:21:31.596-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
2021-08-19T11:21:31.596-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94)
2021-08-19T11:21:31.596-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
2021-08-19T11:21:31.597-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
2021-08-19T11:21:31.597-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
2021-08-19T11:21:31.598-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:356)
2021-08-19T11:21:31.598-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
2021-08-19T11:21:31.599-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
2021-08-19T11:21:31.599-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
2021-08-19T11:21:31.600-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
2021-08-19T11:21:31.600-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
2021-08-19T11:21:31.600-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
2021-08-19T11:21:31.601-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
2021-08-19T11:21:31.602-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
2021-08-19T11:21:31.602-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
2021-08-19T11:21:31.603-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
2021-08-19T11:21:31.603-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Caused by: com.google.cloud.tools.jib.plugins.extension.JibPluginExtensionException: extension configured but not discovered on Jib runtime classpath: com.google.cloud.tools.jib.gradle.extension.ownership.JibOwnershipE
xtension
2021-08-19T11:21:31.603-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.cloud.tools.jib.gradle.GradleProjectProperties.findConfiguredExtension(GradleProjectProperties.java:524)
2021-08-19T11:21:31.604-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.cloud.tools.jib.gradle.GradleProjectProperties.runPluginExtensions(GradleProjectProperties.java:455)
2021-08-19T11:21:31.604-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor.createJibBuildRunnerForRegistryImage(PluginConfigurationProcessor.java:299)
2021-08-19T11:21:31.605-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.cloud.tools.jib.gradle.BuildImageTask.buildImage(BuildImageTask.java:115)
2021-08-19T11:21:31.605-0400 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   ... 92 more

Periodically sync dependency versions with main Jib repo

Most of the dependencies need to be sync'ed with the main Jib repo.

  /* PROJECT DEPENDENCY VERSIONS */
  // define all common versioned dependencies here
  project.ext.dependencyVersions = [
    GUAVA: '28.1-jre',
    JSR305: '3.0.2', // transitively pulled in by GUAVA

    JIB_CORE: '0.15.0',
    JIB_GRADLE: '2.4.0',

    // for Build Plan and Jib Plugins Extension API
    JIB_GRADLE_EXTENSION: '0.4.0',
    JIB_MAVEN_EXTENSION: '0.4.0',

    SPRING_BOOT: '2.3.1.RELEASE', // for Spring Boot Gradle extension
    MAVEN_API: '3.5.2',

    //test
    JUNIT: '4.12',
    MOCKITO_CORE: '3.2.4',
    SLF4J_API: '1.7.25',
    SYSTEM_RULES: '1.19.0',
  ]
  /* PROJECT DEPENDENCY VERSIONS */

Error in configuration example of jib-layer-filter-extension-maven

In the configuration example in the Readme jib-extensions/first-party/jib-layer-filter-extension-maven/README.md, there is following snippet:

          </filters>
        </configuration>
        <!-- To create separate layers for parent dependencies-->
        <createParentDependencyLayers>true</createParentDependencyLayers>
      </pluginExtension>

This does not work, because, as noted in the javadoc of the Configuration class, the createParentDependencyLayers setting should be inside the configuration block and not outside. So the following would be correct:

          </filters>
          <!-- To create separate layers for parent dependencies-->
          <createParentDependencyLayers>true</createParentDependencyLayers>
        </configuration>
      </pluginExtension>

Exclude Spring Boot docker-compose module in jib-spring-boot-extension-maven

Spring Boot has added support for running services through docker-compose as of version 3.1.

This causes the same issues with Jib as devtools does.

Spring Boot itself does exclude the docker compose module in its own repackage goal, see https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#goals-repackage-parameters-details-excludeDockerCompose

So it makes sense to exclude it from Jib as well.

For jib-native-image-extension-gradle what default container image is used? And how can it be overridden?

Spring Boot 3 will be released in November 2022. It will feature support for GraalVM Native Images.

I am trying to build a Native Image with Spring Boot 3 Milestone 5 and the jib-native-image-extension-gradle extension.

According to the extension's documentation, the extension copies the Native Image binary into a container image.

However, I can't find out which container image will be used. Also, I can't find out how to override the default container image.

What is the default container image that the jib-native-image-extension-gradle extension uses and how can it be overridden?

`jib-ownership-extension` is not considering / chown-ing `extraDirectories` directories

The jib-ownership-extension-gradle mentions in it's README.md:

Note the extension can only set ownership on files and directories that are put by Jib.

Seems this does not apply for directories / files added via the extraDirectories configuration.

It would be great if the extension / globs that you specify in the configuration.rules would also apply for files added in the extraDirectories.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.