Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/gradlew text eol=lf
*.bat text eol=crlf
*.jar binary
54 changes: 34 additions & 20 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,24 +1,38 @@
# Compiled class file
*.class
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

# Log file
*.log
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

# BlueJ files
*.ctxt
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

# Mobile Tools for Java (J2ME)
.mtj.tmp/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
### VS Code ###
.vscode/
/data/*
30 changes: 30 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
FROM gradle:jdk21-alpine AS build
WORKDIR /app

# Nur die Build-Dateien kopieren, um Caching zu nutzen
COPY build.gradle settings.gradle gradlew ./
COPY gradle/ ./gradle/

# Abhängigkeiten herunterladen (wird gecacht)
RUN gradle dependencies --no-daemon

# Restlichen Source-Code kopieren und App bauen
COPY . .
RUN gradle clean build --no-daemon -x test

# ---

# ---

# Runtime Stage: Startet die gebaute JAR-Datei
FROM amazoncorretto:21-alpine
WORKDIR /app

# Kopiere nur die gebaute JAR aus dem 'build'-Stage
COPY --from=build /app/build/libs/*.jar app.jar

# Ports freigeben (gute Praxis)
EXPOSE 8080

# Starte die App UND aktiviere Remote Debugging an Port 5005
CMD ["java", "-jar", "app.jar"]
73 changes: 73 additions & 0 deletions backend/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.5'
id 'io.spring.dependency-management' version '1.1.7'
// id "com.gorylenko.gradle-git-properties" version "2.4.1"
}

group = 'de.haevn'
version = '0.0.1-SNAPSHOT'
description = 'backend'

bootRun {
jvmArgs += "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9876"
jvmArgs += '--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED'
}


java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// implementation 'com.h2database:h2'
developmentOnly("org.springframework.boot:spring-boot-devtools")
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.12")
// implementation("pl.project13.maven:git-commit-id-plugin:4.9.10")
implementation('org.springframework.boot:spring-boot-starter-actuator')
implementation 'com.fasterxml.jackson.core:jackson-core'
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'com.fasterxml.jackson.core:jackson-annotations'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
implementation 'com.github.librepdf:openpdf:1.3.30'
implementation 'org.postgresql:postgresql:42.7.3'
implementation 'org.springframework.boot:spring-boot-devtools'
// https://mvnrepository.com/artifact/com.google.googlejavaformat/google-java-format
implementation("com.google.googlejavaformat:google-java-format:1.31.0")
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'org.postgresql:postgresql:42.7.7'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation("org.apache.pdfbox:pdfbox:3.0.6")
implementation("org.apache.pdfbox:pdfbox:3.0.6")
implementation("io.github.openhtmltopdf:openhtmltopdf-core:1.1.31")
implementation("io.github.openhtmltopdf:openhtmltopdf-pdfbox:1.1.31")
implementation("io.github.openhtmltopdf:openhtmltopdf-svg-support:1.1.31")
}

tasks.named('test') {
useJUnitPlatform()
}

tasks.named("compileJava") {
doLast {
file(".trigger-file").setLastModified(System.currentTimeMillis())
}
}
24 changes: 24 additions & 0 deletions backend/dev.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Wir nutzen direkt das Gradle Image als Basis (kein Multi-Stage für Dev!)
FROM gradle:jdk21-alpine

WORKDIR /app

# 1. Gradle-Konfiguration kopieren (für Caching der Dependencies)
COPY build.gradle settings.gradle gradlew ./
COPY gradle/ ./gradle/

# 2. Abhängigkeiten laden
RUN gradle dependencies --no-daemon

# 3. Source Code kopieren
# (Wird zur Laufzeit durch dein Docker-Compose Volume überschrieben,
# aber gut als Fallback)
COPY . .

# Ports: 8080 (App) und 5005 (Debugger)
EXPOSE 8080 5005

# WICHTIG: Statt ein fertiges JAR zu starten, lassen wir Gradle die App starten.
# Das sorgt dafür, dass Änderungen im Code (via Volume) beim Neustart erkannt werden.
# Wir übergeben hier auch die Debugger-Argumente direkt an die JVM von Gradle.
CMD ["gradle", "bootRun", "--no-daemon", "-PjvmArgs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"]
Binary file added backend/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions backend/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading