id = "java"
name = "Java"
group = "Java"
icon = "project-java"
description = "A plain Java application built with Maven or Gradle."
[[fields]]
id = "build"
label = "Build system:"
type = "choice"
segmented = true
options = [{ value = "maven", label = "Maven" }, { value = "gradle", label = "Gradle" }]
default = "maven"
[[fields]]
id = "jdk"
label = "JDK:"
type = "sdk"
sdk = "jdk"
[[fields]]
id = "release"
label = "Java version:"
type = "choice"
options = ["25", "21", "17", "11"]
default = "21"
[[fields]]
id = "group"
label = "Group:"
type = "text"
pattern = '^[A-Za-z_][\w]*(\.[A-Za-z_][\w]*)*$'
default = "com.example"
[[fields]]
id = "artifact"
label = "Artifact:"
type = "text"
pattern = '^[A-Za-z0-9_.-]+$'
default = "{{name|kebab}}"
[[fields]]
id = "package"
label = "Package:"
type = "text"
pattern = '^[A-Za-z_][\w]*(\.[A-Za-z_][\w]*)*$'
default = "{{group}}.{{artifact|ident}}"
[[fields]]
id = "sample"
label = "Add sample code"
type = "checkbox"
default = "true"
[[files]]
path = "pom.xml"
when = { build = "maven" }
content = '''
4.0.0
{{group}}
{{artifact}}
1.0-SNAPSHOT
{{release}}
UTF-8
org.junit.jupiter
junit-jupiter
5.13.4
test
org.apache.maven.plugins
maven-surefire-plugin
3.5.4
'''
[[files]]
path = "settings.gradle.kts"
when = { build = "gradle" }
content = '''
rootProject.name = "{{artifact}}"
'''
[[files]]
path = "build.gradle.kts"
when = { build = "gradle" }
content = '''
plugins {
application
}
group = "{{group}}"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
testImplementation(platform("org.junit:junit-bom:5.13.4"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
tasks.withType {
options.release = {{release}}
options.encoding = "UTF-8"
}
application {
mainClass = "{{package}}.Main"
}
tasks.test {
useJUnitPlatform()
}
'''
[[files]]
path = "src/main/java/{{package|path}}/Main.java"
when = { sample = "true" }
content = '''
package {{package}};
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
'''
[[files]]
path = ".gitignore"
content = '''
target/
build/
.gradle/
*.class
.idea/
'''
[[after]]
label = "Generating the Gradle wrapper"
program = "gradle"
args = ["wrapper", "--no-daemon", "-q"]
when = { build = "gradle" }
env = { JAVA_HOME = "{{jdk}}" }
optional = true
[settings.java]
jdk = "{{jdk}}"