core/providers/java/java.go
core/providers/java/java.goBrowse 1970 files
908 tokens
3,240 bytes
Token encoding: o200k_base
Snapshot 21a254f
← Back to SKILL.md
1package java2 3import (4 "fmt"5 6 "github.com/railwayapp/railpack/core/generate"7 "github.com/railwayapp/railpack/core/plan"8)9 10type JavaProvider struct{}11 12func (p *JavaProvider) Name() string {13 return "java"14}15 16func (p *JavaProvider) Detect(ctx *generate.GenerateContext) (bool, error) {17 return ctx.App.HasMatch("pom.{xml,atom,clj,groovy,rb,scala,yaml,yml}") || ctx.App.HasMatch("gradlew"), nil18}19 20func (p *JavaProvider) Initialize(ctx *generate.GenerateContext) error {21 return nil22}23 24func (p *JavaProvider) CleansePlan(buildPlan *plan.BuildPlan) {}25 26func (p *JavaProvider) StartCommandHelp() string {27 return ""28}29 30func (p *JavaProvider) Plan(ctx *generate.GenerateContext) error {31 build := ctx.NewCommandStep("build")32 build.AddInput(plan.NewStepLayer(ctx.GetMiseStepBuilder().Name()))33 build.AddInput(plan.NewLocalLayer())34 35 if p.usesGradle(ctx) {36 ctx.Logger.LogInfo("Using Gradle")37 38 p.setGradleVersion(ctx)39 p.setJDKVersion(ctx, ctx.GetMiseStepBuilder())40 41 if ctx.App.HasMatch("gradlew") && !ctx.App.IsFileExecutable("gradlew") {42 build.AddCommand(plan.NewExecCommand("chmod +x gradlew"))43 }44 45 build.AddCommand(plan.NewExecCommand("./gradlew clean build -x check -x test -Pproduction"))46 build.AddCache(p.gradleCache(ctx))47 } else {48 ctx.Logger.LogInfo("Using Maven")49 50 ctx.GetMiseStepBuilder().Default("maven", "latest")51 p.setJDKVersion(ctx, ctx.GetMiseStepBuilder())52 53 if ctx.App.HasMatch("mvnw") && !ctx.App.IsFileExecutable("mvnw") {54 build.AddCommand(plan.NewExecCommand("chmod +x mvnw"))55 }56 57 build.AddCommand(plan.NewExecCommand(fmt.Sprintf("%s -DoutputFile=target/mvn-dependency-list.log -B -DskipTests clean dependency:list install -Pproduction", p.getMavenExe(ctx))))58 build.AddCache(p.mavenCache(ctx))59 }60 61 runtimeMiseStep := ctx.NewMiseStepBuilder("packages:mise:runtime")62 p.setJDKVersion(ctx, runtimeMiseStep)63 64 outPath := "target/."65 if ctx.App.HasMatch("**/build/libs/*.jar") || p.usesGradle(ctx) {66 outPath = "."67 }68 69 ctx.Deploy.AddInputs([]plan.Layer{70 runtimeMiseStep.GetLayer(),71 plan.NewStepLayer(build.Name(), plan.Filter{72 Include: []string{outPath},73 }),74 })75 76 ctx.Deploy.StartCmd = p.getStartCmd(ctx)77 78 p.addMetadata(ctx)79 80 return nil81}82 83func (p *JavaProvider) getStartCmd(ctx *generate.GenerateContext) string {84 if p.usesGradle(ctx) {85 buildGradle := p.readBuildGradle(ctx)86 return fmt.Sprintf("java $JAVA_OPTS -jar %s $(ls -1 */build/libs/*jar | grep -v plain)", getGradlePortConfig(buildGradle))87 } else if ctx.App.HasMatch("pom.xml") {88 return fmt.Sprintf("java %s $JAVA_OPTS -jar target/*jar", getMavenPortConfig(ctx))89 } else {90 return "java $JAVA_OPTS -jar target/*jar"91 }92 93}94 95func (p *JavaProvider) addMetadata(ctx *generate.GenerateContext) {96 hasGradle := p.usesGradle(ctx)97 98 if hasGradle {99 ctx.Metadata.Set("javaPackageManager", "gradle")100 } else {101 ctx.Metadata.Set("javaPackageManager", "maven")102 }103 104 var framework string105 if p.usesSpringBoot(ctx) {106 framework = "spring-boot"107 }108 109 ctx.Metadata.Set("javaFramework", framework)110}111 112func (p *JavaProvider) usesSpringBoot(ctx *generate.GenerateContext) bool {113 return ctx.App.HasMatch("**/spring-boot*.jar") ||114 ctx.App.HasMatch("**/spring-boot*.class") ||115 ctx.App.HasMatch("**/org/springframework/boot/**")116}117