Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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 this issue Sep 15, 2021 · 9 comments

Comments

@polyomino24
Copy link

polyomino24 commented Sep 15, 2021

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

@polyomino24 polyomino24 changed the title Spring Boot >= v2.5.0 outputs both executable fat jar and plain jar, and GAE Gradle plugin uses plain one. Spring Boot Gradle plugin >= v2.5.0 outputs both executable fat jar and plain jar, and GAE Gradle plugin uses plain one. Sep 15, 2021
@elefeint
Copy link
Contributor

@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
Copy link
Author

@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
Copy link
Contributor

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

@polyomino24
Copy link
Author

Yes, version 2.4.4 did work.

@chanseokoh
Copy link
Contributor

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
Copy link
Author

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
Copy link
Contributor

Thanks for the feedback. I will leave this open.

@zp-chen-hkmci
Copy link

more friendly one:

appengine {
    stage {
        artifact = bootJar.archiveFile.get()
    }
}

@elefeint
Copy link
Contributor

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

@JoeWang1127 JoeWang1127 transferred this issue from GoogleCloudPlatform/app-gradle-plugin Jan 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants