Компиляция и запуск Java с внешними библиотеками в dockerfile - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь скомпилировать и запустить файл Java с помощью Docker. У меня есть файловая структура:

./Repo/
   Dockerfile
   ./libs/
      org.json.jar
   ./out/
      Program.class
   ./src/
      Program.java

Мой Dockerfile выглядит примерно так:

FROM java:8-jdk-alpine

COPY /src /src/
COPY /out /out/
COPY /libs /libs/

RUN javac ..
CMD java ..

Я хочу иметь возможность компилировать файлы в src и выводить их, используяexternal libs Единственный способ, которым мне удалось это сделать, - это сначала записать CD в / src / и запустить следующее:

javac -d ../out -cp ../libs/org.json.jar Program.java

Но, безусловно, есть способ сделать это из каталога, в котором находится Dockerfile. как?

javac -d /out -cp /libs/org.json.jar /out/Program.java

Следующая проблема - это CMD, необходимая для запуска вышеуказанной программы. Я не уверен, как написать это.

Или я должен скопировать библиотеку json в папку out, где находится скомпилированная программа, и запустить следующую CMD:

java -cp "org.json.jar;" Server

1 Ответ

1 голос
/ 25 октября 2019

Вы пытаетесь скомпилировать файл Program.java по пути / out вместо src, поэтому, вероятно, он не работал.

Попробуйте это

RUN javac -d /out -cp /libs/*.jar /src/Program.java

Тогда вам не нужно будет копировать папку, потому что она будет создана при сборке контейнера. Когда вы запускаете docker build, все должно скомпилироваться


В противном случае при попытке запустить javac вне контейнера, / out и / src не существует на исходном компьютере, поэтому вы должны использовать относительные пути взатем скопируйте папку out only в Dockerfile и удалите использование javac (и переключитесь на использование образа JRE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...