How to create the Docker file from a Maven java SE program?

Asked

Viewed 293 times

0

I actually wrote a Java SE Maven application using netbeans and made a CRUD for some entities that are scanned in the database through JPA.
I was wondering if it is possible to run a textual interface of this program in DOCKER
A web application I can do, create the Docker application file and create the Docker application database file .

However I would like to make a Docker file for a Maven javaSE application with a simple textual interface, To be quite simple I will put an example with two classes only:

import java.util.Scanner;

public class Principal {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        Elevador elevador = new Elevador(10, 6);

        int opcao = exibirMenu(in);
        while (opcao != 0) {
            switch (opcao) {

                case 1:

                    System.out.println("Andar Atual: " + elevador.getAndarAtual());
                    break;

                case 2:
                    if (elevador.entra() == false) {
                        System.out.println("Elevador está cheio!");
                    } else {
                        System.out.println("Foi inserido uma pessoa.");
                    }
                    break;

                case 3:

                    System.out.println("Estado do Elevador: \n");
                    System.out.println(elevador);
                    break;

                case 4:

                    System.out.println("Informe o andar:");
                    int andarSubir = in.nextInt();
                    if (elevador.sobe(andarSubir) == false) {
                        if (andarSubir < elevador.getAndarAtual()) {
                            System.out.println("Operação não realizada. Andar menor que o atual.");
                        } else {
                            System.out.println("andar inexistente!");
                        }
                    } else {
                        System.out.println("subiu para o " + andarSubir + "  andar.");
                    }

                    in.nextLine();
                    break;

                case 5:

                    System.out.println("Informe o andar:");
                    int andarDescer = in.nextInt();
                    if (elevador.desce(andarDescer) == false) {
                        if (andarDescer > elevador.getAndarAtual()) {
                            System.out.println("Operaçãoo não realizada. Andar maior que o atual.");
                        } else {
                            System.out.println("Você já está no térreo!");
                        }

                    } else {
                        System.out.println("desceu para o " + andarDescer + "o andar.");
                    }

                    in.nextLine();
                    break;

                case 6:
                    if (elevador.sai() == false) {
                        System.out.println("Elevador está vazio!");
                    } else {
                        System.out.println("Saiu uma pessoa");
                    }
                    break;

                default:
                    System.out.println("Opção Inválida. Enter para voltar ao Menu");
                    in.nextLine();
                    in.nextLine();
            }
            opcao = exibirMenu(in);
        }

        in.close();
    }

    private static int exibirMenu(Scanner in) {
        System.out.println("\nEscolha uma opção: \n 1 - Exibir o andar atual "
                + "\n 2 - Realizar a entrada de pessoas "
                + "\n 3 - Mostrar o estado do elevador "
                + "\n 4 - Subir "
                + "\n 5 - Descer"
                + " \n 6 -Realizar a saída de pessoas "
                + " \n 0 - Sair");
        int opcao = in.nextInt();
        return opcao;
    }

}

and the Elevator class:

public class Elevador {

    private int totalAndares, andarAtual, capacidade, qtdePessoas;

    public Elevador(int totalAndares, int capacidade) {
        this.totalAndares = totalAndares;
        this.andarAtual = 0;
        this.capacidade = capacidade;
        this.qtdePessoas = 0;
    }

    public boolean entra() {

        if (qtdePessoas < capacidade) {
            qtdePessoas++;
            return true;
        } else {
            return false;
        }
    }

    public boolean sai() {

        if (qtdePessoas > 0) {
            qtdePessoas--;
            return true;
        } else {
            return false;
        }

    }

    public boolean sobe(int andar) {

        if (andar < totalAndares && andar > 0 && andar > andarAtual) {
            andarAtual = andar;
            return true;
        } else {
            return false;
        }

    }

    public boolean desce(int andar) {

        if (andarAtual > 0 && andar < andarAtual) {
            andarAtual = andar;

            return true;
        } else {
            return false;
        }

    }

    public int getTotalAndares() {
        return totalAndares;
    }

    public void setTotalAndares(int totalAndares) {
        this.totalAndares = totalAndares;
    }

    public int getAndarAtual() {
        return andarAtual;
    }

    public void setAndarAtual(int andarAtual) {
        this.andarAtual = andarAtual;
    }

    public int getCapacidade() {
        return capacidade;
    }

    public void setCapacidade(int capacidade) {
        this.capacidade = capacidade;
    }

    public int getQtdePessoas() {
        return qtdePessoas;
    }

    public void setQtdePessoas(int qtdePessoas) {
        this.qtdePessoas = qtdePessoas;
    }

    public String toString() {

        return "Total de Andares: " + this.totalAndares + "\nAndar Atual: " + this.andarAtual
                + "\nCapacidade do Elevador: " + this.capacidade + "\nQuantidade de Pessoas no Elevador: " + this.qtdePessoas;

    }

}

How to build the Docker file from this application?

  • 1

    I didn’t quite understand what the difficulty would be. It seems to me that the basics of Java is just to do this.

  • Do what? If posting something you are doing may help understand question.

  • Getting the arguments by the main args[] just call so script.jar param 1 param2, nay?

  • 1

    From what I understand he wants to make an application in CLI(Command Line Interface), right? I’ve never done this with Java outside using the console but I believe it is possible yes.

  • @That’s right! It’s possible , I just checked!! I edited the question!! Thank you!

  • 1

    @Penada painted if you found the solution, post it as answer!

Show 1 more comment

1 answer

2

A solution would be:

Create an archive Dockerfile with the content below:

FROM openjdk:7-jdk
ADD . /code
WORKDIR /code
RUN javac *.java
CMD java Principal

Command to generate the image named "test-java":

$ Docker build-t test-java .

Command to execute the generated bytecode:

$ Docker run -it test-java

Upshot:

Escolha uma opção:
 1 - Exibir o andar atual
 2 - Realizar a entrada de pessoas
 3 - Mostrar o estado do elevador
 4 - Subir
 5 - Descer
 6 -Realizar a saída de pessoas
 0 - Sair
  • Thanks for the expensive answer , but still missing a detail, I built the image , but at the time of running gave : Error: Could not find or load main class Home

  • @Penapintada Corrected solution. Redo all steps.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.