-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.layer2
More file actions
120 lines (95 loc) · 3.97 KB
/
Dockerfile.layer2
File metadata and controls
120 lines (95 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Layer 2: Java Bench Image
# Extends Layer 1 (devbench-base) with Java specific tools
# Includes: OpenJDK 21, Maven, Gradle, Spring CLI, Java tools
ARG BASE_IMAGE=devbench-base:brett
FROM ${BASE_IMAGE}
# Container version labels
LABEL layer="2"
LABEL layer.name="java-bench"
LABEL layer.version="1.0.0"
LABEL layer.description="Java development tools and JDK"
LABEL bench.type="java"
ARG USERNAME=brett
# Switch to root for Java installation
USER root
# ========================================
# JAVA JDK
# ========================================
# Install OpenJDK 21 (LTS)
RUN apt-get update && apt-get install -y \
openjdk-21-jdk \
openjdk-21-jre \
&& rm -rf /var/lib/apt/lists/*
# Set JAVA_HOME
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
ENV PATH="$JAVA_HOME/bin:$PATH"
# ========================================
# BUILD TOOLS
# ========================================
# Install Maven
RUN apt-get update && apt-get install -y \
maven \
&& rm -rf /var/lib/apt/lists/*
# Install Gradle
RUN wget https://services.gradle.org/distributions/gradle-8.5-bin.zip -P /tmp \
&& unzip -d /opt/gradle /tmp/gradle-8.5-bin.zip \
&& rm /tmp/gradle-8.5-bin.zip \
&& ln -s /opt/gradle/gradle-8.5/bin/gradle /usr/local/bin/gradle
ENV GRADLE_HOME=/opt/gradle/gradle-8.5
ENV PATH="$GRADLE_HOME/bin:$PATH"
# ========================================
# JAVA DEVELOPMENT TOOLS
# ========================================
# Install SDKMan for Java version management
USER $USERNAME
RUN curl -s "https://get.sdkman.io" | bash \
&& bash -c "source $HOME/.sdkman/bin/sdkman-init.sh"
USER root
# Install Spring Boot CLI
RUN wget https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/3.2.0/spring-boot-cli-3.2.0-bin.tar.gz -P /tmp \
&& tar -xzf /tmp/spring-boot-cli-3.2.0-bin.tar.gz -C /opt \
&& rm /tmp/spring-boot-cli-3.2.0-bin.tar.gz \
&& ln -s /opt/spring-3.2.0/bin/spring /usr/local/bin/spring
# ========================================
# CODE QUALITY TOOLS
# ========================================
# Install Checkstyle, SpotBugs, PMD via Maven plugins
# These will be available through project builds
# ========================================
# USER CONFIGURATION
# ========================================
USER $USERNAME
# Create common Java project directories
RUN mkdir -p /workspace/projects \
&& mkdir -p /workspace/m2repo \
&& mkdir -p /workspace/.gradle
# Configure Maven to use workspace m2repo
RUN mkdir -p ~/.m2 \
&& echo '<?xml version="1.0" encoding="UTF-8"?>' > ~/.m2/settings.xml \
&& echo '<settings>' >> ~/.m2/settings.xml \
&& echo ' <localRepository>/workspace/m2repo</localRepository>' >> ~/.m2/settings.xml \
&& echo '</settings>' >> ~/.m2/settings.xml
# Add Java development aliases and environment to .zshrc
RUN echo '' >> ~/.zshrc && \
echo '# Java Development Environment' >> ~/.zshrc && \
echo 'export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64' >> ~/.zshrc && \
echo 'export GRADLE_HOME=/opt/gradle/gradle-8.5' >> ~/.zshrc && \
echo 'export PATH="$JAVA_HOME/bin:$GRADLE_HOME/bin:$PATH"' >> ~/.zshrc && \
echo '' >> ~/.zshrc && \
echo '# Java Build aliases' >> ~/.zshrc && \
echo 'alias mvn-clean="mvn clean"' >> ~/.zshrc && \
echo 'alias mvn-package="mvn clean package"' >> ~/.zshrc && \
echo 'alias mvn-install="mvn clean install"' >> ~/.zshrc && \
echo 'alias mvn-test="mvn test"' >> ~/.zshrc && \
echo 'alias gradle-build="gradle build"' >> ~/.zshrc && \
echo 'alias gradle-clean="gradle clean"' >> ~/.zshrc && \
echo 'alias gradle-test="gradle test"' >> ~/.zshrc && \
echo 'alias spring-run="./mvnw spring-boot:run"' >> ~/.zshrc
# Add SDKMan initialization
RUN echo '' >> ~/.zshrc && \
echo '# SDKMan initialization' >> ~/.zshrc && \
echo 'export SDKMAN_DIR="$HOME/.sdkman"' >> ~/.zshrc && \
echo '[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.zshrc
WORKDIR /workspace
# Default command
CMD ["sleep", "infinity"]