GoogleCloudPlatform / appengine-plugins

A client Java library to manage App Engine Java applications for any project that performs App Engine Java application management. For example, the Maven, Gradle and Eclipse App Engine plugins, custom user tools, etc.
Apache License 2.0
39 stars 26 forks source link

Spring Boot Gradle plugin >= v2.5.0 outputs both executable fat jar and plain jar, and GAE Gradle plugin uses plain one. #1003

Open polyomino24 opened 2 years ago

polyomino24 commented 2 years ago

This is not a bug, but a feature request. Spring Boot Gradle plugin in the current version generates both executable fat jar and plain jar in the default settings like build/libs/aaa-0.0.1.jar build/libs/aaa-0.0.1-plain.jar , and when I run ./gradlew appengineShowConfiguration, it shows stage artifact is plain one.

My feature request is that GAE plugin will use fat one automatically without specifying artifact or disabling generating plain one.

environment: macOS10.15.7 openjdk version "11.0.12" 2021-07-20 LTS gradle 6.8.3 Spring Boot Gradle plugin 2.5.4 GAE Gradle plugin 2.4.2 GAE: flexible and custom runtime

reference: https://docs.spring.io/spring-boot/docs/2.5.1/gradle-plugin/reference/htmlsingle/#packaging-executable.and-plain-archives

elefeint commented 2 years ago

@polyomino-24 Just to clarity, does the GAE gradle plugin deploy the correct JAR with appengineDeploy, and only shows the wrong JAR in appengineShowConfiguration?

polyomino24 commented 2 years ago

@elefeint Thanks for reading the issue. No, when I run appengineDeploy, the files in build/staged-app directory are only plain jar, Dockerfile, and app.yaml. Actually, my Dockerfile is

FROM openjdk:11-oracle
COPY main-0.0.1.jar main.jar
CMD ["java", "-Duser.timezone=Asia/Tokyo", "-jar", "/main.jar"]%

and when I updated Spring Boot Gradle plugin, I became unable to deploy with appengineDeploy because main-0.0.1.jar(fat jar) was not in the build/stage-app directory.

elefeint commented 2 years ago

Did this work with the earlier versions of Spring Boot plugin?

polyomino24 commented 2 years ago

Yes, version 2.4.4 did work.

chanseokoh commented 2 years ago

You can set appengine.stage.artifact to specify a deploy artifact:

appengine.stage.artifact = 'build/libs/demo-0.0.1-SNAPSHOT.jar'

I'm afraid this feature request is a very low priority for us. We accept contributions though.

polyomino24 commented 2 years ago

Thanks for your comment! I know that this workaround works and this request is a low priority for your team, but I think Gradle + Spring boot + Google App Engine is a commonly used combination so I wrote this issue to help someone. Please close this issue if you want.

chanseokoh commented 2 years ago

Thanks for the feedback. I will leave this open.

zp-chen-hkmci commented 2 years ago

more friendly one:

appengine {
    stage {
        artifact = bootJar.archiveFile.get()
    }
}
elefeint commented 2 years ago

At minimum we should document these workarounds. I've run into this last year and thoroughly forgot.