Hallo **.
Plötzlich möchten Sie mit VS Code entwickeln und die Ausführungsumgebung ist Java in einem Container. Aber es gibt einige, die im Weg stehen. Ja, es ist Proxy.
Im Fall eines internen Proxys denke ich, dass die Situation für jedes Unternehmen anders ist, aber als erfolgreiches Beispiel, wenn es Ihnen ein wenig hilft ...
Dockerfile
Klicken Sie hier für "Dockerfile" in der Remote-Entwicklungsumgebung.
${workspaceFolder}/.devcontainer/Dockerfile
FROM adoptopenjdk/openjdk11:jdk-11.0.7_10-centos
# This Dockerfile adds a non-root user with sudo access. Use the "remoteUser"
# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
# will be updated to match your local UID/GID (when using the dockerFile property).
# See https://aka.ms/vscode-remote/containers/non-root-user for details.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=${USER_UID}
ARG MAVEN_VERSION=3.6.1
ARG MAVEN_SHA=b4880fb7a3d81edd190a029440cdf17f308621af68475a4fe976296e71ff4a4b546dd6d8a58aaafba334d309cc11e638c52808a4b0e818fc0fd544226d952544
#Proxy-Einstellungen
# devcontainer.Mit json angeben
# see https://code.visualstudio.com/docs/remote/containers-advanced#_option-2-use-an-env-file
ARG PROXY=${PROXY}
ENV http_proxy=${PROXY}
ENV https_proxy=${PROXY}
ENV HTTP_PROXY=${PROXY}
ENV HTTPS_PROXY=${PROXY}
RUN echo "building..." \
#
# Create a non-root user to use if preferred
# see https://aka.ms/vscode-remote/containers/non-root-user.
&& groupadd --gid ${USER_GID} ${USERNAME} \
&& useradd -s /bin/bash --uid ${USER_UID} --gid ${USER_GID} -m ${USERNAME} \
#
# Install Maven
&& mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& echo "${MAVEN_SHA} /tmp/apache-maven.tar.gz" | sha512sum -c - \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn \
#
# Maven User Settings
# /home/vscode/.m2/Erstellen Sie den Eigentümer und ändern Sie ihn in den Benutzer vscode
&& mkdir /home/${USERNAME}/.m2 \
&& chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.m2
#Maven Pfadeinstellung
ENV MAVEN_HOME /usr/share/maven
Ich benutze Maven
für die Entwicklung, also habe ich Maven
installiert.
Da es sich bei der Produktionsausführungsumgebung um die CentOS 7-Serie handelt, verwendet die Remote Development-Umgebung auch die CentOS 7-Serie + Java als Basisimage.
Es gibt "$ {PROXY}", aber dies wird von "devcontainer.json" übergeben, das später beim Erstellen des Images beschrieben wird. Ich dachte, es wäre zum Zeitpunkt der Erstellung eine Art Einbettung in das Image, aber da ich nicht vorhabe, das Image direkt in der Entwicklungsumgebung jeder Person freizugeben, entschied ich, dass es in diesem Zustand kein Problem geben würde.
devcontainer.json
Als nächstes folgt die Konfigurationsdatei der Remote Development-Umgebung "devcontainer.json".
json-doc:${workspaceFolder}/.devcontainer/devcontainer.json
{
"name": "Sample Project",
"dockerFile": "Dockerfile",
//Einstellungen zum Zeitpunkt der Docker-Erstellung (Image-Erstellung)
// see - https://github.com/microsoft/vscode-remote-release/issues/46
"build": {
"args": {
// TODO:Je nach Umgebung beschrieben
"PROXY": "http://USER:PASS@HOST:PORT"
}
},
//VS Code-Standardeinstellungen beim Erstellen eines Containers (beachten Sie, dass die Arbeitsbereichseinstellungen gewinnen)
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"java.home": "/opt/java/openjdk",
// Language Server
// see - https://github.com/redhat-developer/vscode-java/wiki/Using-a-Proxy
// TODO:Je nach Umgebung beschrieben
"java.jdt.ls.vmargs": "-Dhttp.proxyHost=HOST -Dhttp.proxyPort=PORT -Dhttp.proxyUser=USER -Dhttp.proxyPassword=PASS -Dhttps.proxyHost=HOST -Dhttps.proxyPort=PORT -Dhttps.proxyUser=USER -Dhttps.proxyPassword=PASS",
// see - https://github.com/redhat-developer/vscode-java/issues/399#issuecomment-355113311
"java.import.gradle.enabled": false
},
//VS-Code-Erweiterung installiert, wenn der Container erstellt wird (angegeben durch ID)
"extensions": [
// Java
"vscjava.vscode-java-pack", // Java Extension Pack
],
//Befehle, die nach der Containererstellung ausgeführt werden
"postCreateCommand": "./.devcontainer/postCreateCommand.sh",
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
8090 // app
],
//Anmeldebenutzer des Docker-Containers
"remoteUser": "vscode",
}
Der Punkt ist "java.jdt.ls.vmargs" in "settings". Wie Sie auf der folgenden Seite sehen können, müssen Sie PROXY für "Java Language Server" einstellen.
Using a Proxy - redhat-developer/vscode-java - GitHub
Maven konfiguriert die Proxy-Einstellungen in Maven.
Ich habe diese Dateien in den Ordner ".devcontainer" gelegt. Kopieren Sie es mit der später beschriebenen Shell in den Ordner ".m2" ("/ home / vscode / .m2") direkt unter dem Benutzer "vscode".
settings.xml
<proxies>
<proxy>
<!-- TODO:Je nach Umgebung beschrieben-->
<id>sample</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.sample.com</host>
<port>1234</port>
<username>user</username>
<password>{encrypted-password=}</password>
<nonProxyHosts>localhost</nonProxyHosts>
</proxy>
</proxies>
settings-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<settingsSecurity>
<!-- TODO:Je nach Umgebung beschrieben-->
<master>{encrypted-master-password=}</master>
</settingsSecurity>
Referenz: Passwortverschlüsselung --Maven
sh:${workspaceFolder}/.devcontainer/postCreateCommand.sh
#!/usr/bin/bash
#Erstverarbeitung
echo ''
echo '--------------------------------------------'
echo ' Init'
echo '--------------------------------------------'
#Einstellungen / Basisinformationen
MAVEN_SETTING_DEST=`realpath ~/.m2/`
echo 'Grundinformation'
echo "Arbeitsverzeichnis: `pwd`"
echo "maven: `mvn --version`"
#Kopieren Sie die Maven-Konfigurationsdatei
echo ''
echo '--------------------------------------------'
echo ' Copy Maven settings files'
echo '--------------------------------------------'
echo 'Der Kopiervorgang beginnt.'
cp ./.devcontainer/settings.xml ./.devcontainer/settings-security.xml ${MAVEN_SETTING_DEST}
echo 'Der Kopiervorgang ist abgeschlossen.'
ls -la ${MAVEN_SETTING_DEST}
#Verarbeitung beenden
echo ''
echo '--------------------------------------------'
echo ' Exit'
echo '--------------------------------------------'
echo 'Der Prozess endet.'
exit 0
Die durch postCreateCommand
in .devcontainer / devcontainer.json
angegebene Shell. Es wird getroffen, nachdem der Container erstellt wurde.
Was den Inhalt betrifft, haben wir die Maven-Einstellungsdateien in den Ordner ".m2" ("/ home / vscode / .m2") direkt unter dem Benutzer "vscode" home kopiert.
Wenn das alles ist, sollten Sie es direkt in postCreateCommand
von devcontainer.json
schreiben, ohne es in die Shell zu schneiden ...: angel:
Alles was Sie tun müssen, ist es normal zu starten! Ich werde die Details weglassen, weil es sich von der Hauptzeile unterscheidet, aber ungefähr ...
--Installieren Sie die Erweiterung VS Code Remote --Container (vscode: extension / ms-vscode-remote.remote-container) und
nicht wahr!
Derzeit scheint sich der Ordner ".devcontainer" direkt unter dem Stammordner des VS Code-Arbeitsbereichs zu befinden.
Übrigens ... Ich hatte nicht genug Maschinenspezifikationen, also gab ich es endlich auf, mich mit dieser Methode zu entwickeln: angel: Ich denke jedoch, dass es sehr praktisch ist, da es einfacher ist, die Umgebung sofort zu erstellen. Wenn es also kein Problem mit den Spezifikationen gibt, sollten Sie es auf jeden Fall positiv bewerten!
Ich hoffe, es hilft Menschen, die sich in einer Proxy-Umgebung befinden + VS Code Remote Development + Java.
Na dann!
Recommended Posts