2
respostas

[Projeto] Como ter todos projetos em uma workspace

Quero ter todos os meus projetos rodando na mesma workspace do intellj, sem ter que ficar abrindo varias workspaces, pois acaba consumindo muito e acabo me perdendo no meio do desenvolvimento. tentei configurar mas não tive sucesso, não sei como fazer, procurei em diversos foruns e só achei que tenho que configurar cada modulo, via project struture só que tentei e não consegui Workspace Intellj com o projeto sem ser identificadoTentativa de configurar a estrutura, ja coloquei a pasta src, main: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Raiz da pasta com as pastas de cada projeto: gateway; pagamentos; pedidos; server

2 respostas

Veja se consegue seguir esse passo a passo:

Passo 1: Criar um novo projeto ou abrir o seu projeto principal Abra o IntelliJ e crie um novo projeto ou abra o seu projeto principal onde você deseja adicionar outros módulos.

Passo 2: Adicionar módulos existentes ao projeto Adicionar módulos existentes:

No menu superior, vá em File > Project Structure. Selecione Modules na barra lateral esquerda. Clique no ícone de "+" no canto superior esquerdo e escolha Import Module. Navegue até a pasta do projeto que você deseja adicionar e selecione-o. Escolha o tipo de projeto (geralmente Java ou Maven ou Gradle, dependendo do seu projeto). Clique em OK ou Apply. Configurar módulos:

Agora, cada módulo será listado na aba Modules da janela Project Structure. Você pode configurar dependências entre módulos, se necessário, clicando em Dependencies na janela do módulo.

Passo 3: Configurar o src para cada módulo Dentro de cada módulo, você precisa garantir que a estrutura de diretórios esteja configurada corretamente.

Selecione o módulo desejado na aba Modules. Vá até a guia Sources e marque os diretórios corretos (como src/main/java, src/test/java, etc.) para que o IntelliJ reconheça a estrutura do projeto.

Passo 4: Verificar as configurações de pom.xml ou build.gradle Se os seus projetos são baseados em Maven ou Gradle, é importante garantir que o arquivo pom.xml ou build.gradle esteja configurado corretamente para lidar com os módulos.

Para Maven, adicione os módulos no arquivo pom.xml do projeto principal. Para Gradle, adicione os módulos no arquivo settings.gradle.

Passo 5: Garantir que a estrutura do projeto seja identificada Às vezes, mesmo após adicionar os módulos, o IntelliJ não identifica corretamente os módulos na estrutura. Para garantir que tudo está configurado corretamente, faça o seguinte:

No menu File, selecione Invalidate Caches / Restart. Clique em Invalidate and Restart para limpar o cache e forçar o IntelliJ a reconhecer todos os módulos.

Passo 6: Verificar o funcionamento Depois de configurar todos os módulos, eles devem aparecer na aba Project no painel lateral, todos dentro do mesmo workspace. Agora você pode trabalhar com todos os projetos em uma única janela do IntelliJ sem abrir múltiplas instâncias.

Espero ter ajudado!

Um boa opção para isso é utilizar o docker.

No meu caso eu criei repositorio para cada serviço, e um repositório global, que tem os serviços como submodulos, com isso posso iniciar todos os serviços a partir do repositorio global, com o docker de cada um ja configurado.

O repositorio criado está publico, pode ver como foi executado.

https://github.com/WellysonP/microservice-lsim

para criar os submodulos primeiro tive que criar os repositorios de cada serviço, depois adicionei ao repositorio global usando:

git submodule add {repositorio}

substituindo o "{repositorio}" pelo ssh do repositorio que queria adicionar.

por fim, depois de adicionado todos os repositorios, foi criado o arquivo Dockerfile para criação da imagem de cada serviço, no exemplo abaixo estou mostrando o do servidor Eureka.

FROM ubuntu:latest
LABEL authors="wellyson"

# Etapa 1: Usar uma imagem Gradle para construir o JAR
FROM gradle:8.3-jdk17 AS builder

WORKDIR /app

# Copiar os arquivos do projeto
COPY . .

# Rodar o build para gerar o JAR
RUN ./gradlew bootJar

# Etapa 2: Usar uma imagem mais leve para rodar o aplicativo
FROM eclipse-temurin:17-jdk-alpine

WORKDIR /app

EXPOSE 8761

# Copiar o JAR da etapa de build
COPY --from=builder /app/build/libs/server-0.0.1-SNAPSHOT.jar /app.jar

# Copiar o script wait-for-it.sh para dentro do container
COPY wait-for-it.sh /app/wait-for-it.sh

# Tornar o script executável
RUN chmod +x /app/wait-for-it.sh

ENTRYPOINT ["java", "-jar", "/app.jar"]

com isso foi criado o docker-compose para cada serviço, no exemplo abaixo mostra o do servidor Eureka:

services:
  server-lsim:
    image: server-lsim
    container_name: server-lsim
    build:
      context: .
    ports:
      - "8761:8761"
    networks:
      - lsim-network
    environment:
      - SPRING_PROFILES_ACTIVE=docker

networks:
  lsim-network:
    external: true

por fim, foi criado um docker-compose.yml também no repositorio global, onde ele utiliza os docker-compose de cada serviço para iniciar todos ao mesmo tempo, incluindo a instancia do mysql e uma rede para os serviços se comunicarem:

services:
  mysql:
    image: mysql
    container_name: mysql-lsim
    environment:
      MYSQL_ROOT_PASSWORD: mysql
    ports:
      - "3306:3306"
    networks:
      - lsim-network

  server-lsim:
    extends:
      file: ./server-lsim/docker-compose.yml
      service: server-lsim

  pagamentos-lsim:
    extends:
      file: ./pagamentos-lsim/docker-compose.yml
      service: pagamentos-lsim

  pedidos-lsim:
    extends:
      file: ./pedidos-lsim/docker-compose.yml
      service: pedidos-lsim

  gateway-lsim:
    extends:
      file: ./gateway-lsim/docker-compose.yml
      service: gateway-lsim

networks:
  lsim-network:
    driver: bridge

por fim, basta abrir o terminal na pasta do repositorio global e rodar o comando:

docker compose up

Preciso mencionar o prós e contras dessa opção.

Prós: Todos os serviços rodando com apenas um unico comando no terminal (nem precisa abrir IDE) Contra: A cada alteração no código, tem que subir novamente o container do serviço modificado.

exemplo: se modificou o serviço "pedidos-lsim", basta rodando o comando:

docker compose restart pedidos-lsim

esse problema do restart pode ser resolvido com uma compartilhamento de volumes com o container