Initial commit
This commit is contained in:
commit
ed4b6dd072
8 changed files with 919 additions and 0 deletions
7
.devcontainer/Dockerfile
Normal file
7
.devcontainer/Dockerfile
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
FROM mcr.microsoft.com/devcontainers/java:25-bookworm
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
graphviz \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
51
.devcontainer/devcontainer.json
Normal file
51
.devcontainer/devcontainer.json
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"name": "Java 25 Classroom",
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile"
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/common-utils:2": {},
|
||||||
|
"ghcr.io/devcontainers/features/java:1": {
|
||||||
|
"version": "25",
|
||||||
|
"installMaven": true,
|
||||||
|
"installGradle": false
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
|
||||||
|
"ghcr.io/devcontainers/features/sshd:1": {
|
||||||
|
"version": "latest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"vscjava.vscode-java-pack",
|
||||||
|
"vmware.vscode-boot-dev-pack",
|
||||||
|
"redhat.vscode-xml",
|
||||||
|
"redhat.vscode-yaml",
|
||||||
|
"ms-azuretools.vscode-containers",
|
||||||
|
"jebbs.plantuml",
|
||||||
|
"GitHub.copilot",
|
||||||
|
"GitHub.copilot-chat",
|
||||||
|
"EditorConfig.EditorConfig"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"java.configuration.runtimes": [
|
||||||
|
{
|
||||||
|
"name": "JavaSE-25",
|
||||||
|
"path": "/usr/local/sdkman/candidates/java/current",
|
||||||
|
"default": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"java.compile.nullAnalysis.mode": "automatic",
|
||||||
|
"java.configuration.updateBuildConfiguration": "automatic",
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"files.trimTrailingWhitespace": true,
|
||||||
|
"files.insertFinalNewline": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"forwardPorts": [
|
||||||
|
8080
|
||||||
|
],
|
||||||
|
"postCreateCommand": "java -version && mvn -version && docker --version"
|
||||||
|
}
|
||||||
48
.editorconfig
Normal file
48
.editorconfig
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# EditorConfig is awesome: https://editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.java]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.xml]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.yml]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.yaml]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.json]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[Dockerfile]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.sh]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.bat]
|
||||||
|
end_of_line = crlf
|
||||||
|
|
||||||
|
[*.ps1]
|
||||||
|
end_of_line = crlf
|
||||||
115
.gitignore
vendored
Normal file
115
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,115 @@
|
||||||
|
# Java / JVM
|
||||||
|
*.class
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.ear
|
||||||
|
*.nar
|
||||||
|
*.log
|
||||||
|
hs_err_pid*
|
||||||
|
replay_pid*
|
||||||
|
target/
|
||||||
|
bin/
|
||||||
|
out/
|
||||||
|
build/
|
||||||
|
.gradle/
|
||||||
|
.gradle-cache/
|
||||||
|
|
||||||
|
# Maven
|
||||||
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
release.properties
|
||||||
|
|
||||||
|
# IDEs
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.settings/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
|
||||||
|
# Dev Containers
|
||||||
|
# Mantém configuração versionada
|
||||||
|
!.devcontainer/
|
||||||
|
!.devcontainer/devcontainer.json
|
||||||
|
!.devcontainer/Dockerfile
|
||||||
|
|
||||||
|
# Vaadin
|
||||||
|
node_modules/
|
||||||
|
frontend/generated/
|
||||||
|
src/main/frontend/generated/
|
||||||
|
src/main/bundles/
|
||||||
|
src/main/resources/META-INF/VAADIN/
|
||||||
|
vite.generated.ts
|
||||||
|
types.d.ts
|
||||||
|
package-lock.json
|
||||||
|
pnpm-lock.yaml
|
||||||
|
webpack.generated.js
|
||||||
|
webpack.config.js
|
||||||
|
webpack.generated.config.js
|
||||||
|
|
||||||
|
# Node / JavaScript / TypeScript
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
.pnpm-store/
|
||||||
|
.npm/
|
||||||
|
.yarn/
|
||||||
|
dist/
|
||||||
|
coverage/
|
||||||
|
.cache/
|
||||||
|
.parcel-cache/
|
||||||
|
.next/
|
||||||
|
.nuxt/
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
.pytest_cache/
|
||||||
|
.mypy_cache/
|
||||||
|
.ruff_cache/
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
ENV/
|
||||||
|
.ipynb_checkpoints/
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
.docker/
|
||||||
|
docker-compose.override.yml
|
||||||
|
*.env
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
desktop.ini
|
||||||
|
|
||||||
|
# Logs / temporários
|
||||||
|
logs/
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# Arquivos locais do projeto
|
||||||
|
application-local.yml
|
||||||
|
application-local.yaml
|
||||||
|
application-dev.yml
|
||||||
|
application-dev.yaml
|
||||||
20
README.md
Normal file
20
README.md
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Desenvolvimento Java
|
||||||
|
- Repositório base para uso em disciplinas de desenvolvimento de software
|
||||||
|
- Configurado para desenvolvimento em Java
|
||||||
|
- Pensado para ser usado como "Monorepo" para uma série de projetos de aula
|
||||||
|
- As instruções a seguir referem-se ao uso deste repositório em conjunto com o CodeSpaces
|
||||||
|
|
||||||
|
## Criação de Projetos Java Básicos
|
||||||
|
O script "create-project.sh" cria um projeto Maven/Java básico para ser usado em disciplinas de algoritmos e programação
|
||||||
|
- Para que o uso deste script seja possível é necessário que o mesmo tenha permissão de execução. Antes de usar o script pela primeira vez use o comando: `chmod +x create-project.sh`
|
||||||
|
- Para criar um projeto usando o script use o comando: `./create-project.sh com.exemplo meu-projeto`
|
||||||
|
- Para compilar e executar o projeto use as opções do VSCode
|
||||||
|
|
||||||
|
## Criação de projetos usando Vaadin
|
||||||
|
O script "create-vaadin-project.sh" cria um projeto Maven/Spring-Boot/Vaadin para ser usado em disciplinas de programação
|
||||||
|
- Para que o uso deste script seja possível é necessário que o mesmo tenha permissão de execução. Antes de usar o script pela primeira vez use o comando: `chmod +x create-vaadin-project.sh`
|
||||||
|
- Para criar um projeto usando o script use o comando: `./create-vaadin-project.sh com.exemplo meu-projeto`
|
||||||
|
- Para compilar e executar o projeto use o comando: `mvn spring-boot:run`
|
||||||
|
|
||||||
|
## Criação de projetos SpringBoot
|
||||||
|
- Use o plugin de criação de projetos Spring-Boot do VSCode
|
||||||
162
create-project.sh
Normal file
162
create-project.sh
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [ "$#" -lt 2 ]; then
|
||||||
|
echo "Uso: $0 <groupId> <artifactId>"
|
||||||
|
echo "Exemplo: $0 com.exemplo meu-projeto"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
GROUP_ID="$1"
|
||||||
|
ARTIFACT_ID="$2"
|
||||||
|
|
||||||
|
echo "Criando projeto Maven '$ARTIFACT_ID' com groupId '$GROUP_ID' e Java 25..."
|
||||||
|
|
||||||
|
BASE_DIR="$ARTIFACT_ID"
|
||||||
|
PACKAGE_DIR="$(echo "$GROUP_ID" | tr '.' '/')"
|
||||||
|
|
||||||
|
SRC_MAIN_JAVA="$BASE_DIR/src/main/java/$PACKAGE_DIR"
|
||||||
|
SRC_TEST_JAVA="$BASE_DIR/src/test/java/$PACKAGE_DIR"
|
||||||
|
|
||||||
|
if [ -e "$BASE_DIR" ]; then
|
||||||
|
echo "Erro: o diretório '$BASE_DIR' já existe."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$SRC_MAIN_JAVA"
|
||||||
|
mkdir -p "$SRC_TEST_JAVA"
|
||||||
|
|
||||||
|
cat > "$BASE_DIR/pom.xml" <<EOF
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||||
|
https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>$GROUP_ID</groupId>
|
||||||
|
<artifactId>$ARTIFACT_ID</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.release>25</maven.compiler.release>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- JUnit Jupiter para testes unitários -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
<version>5.10.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<!-- Compilação com Java 25 -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.11.0</version>
|
||||||
|
<configuration>
|
||||||
|
<release>25</release>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Execução dos testes JUnit -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
<configuration>
|
||||||
|
<useModulePath>false</useModulePath>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Execução da classe principal -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<version>3.1.0</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_JAVA/App.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
public class App {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println(
|
||||||
|
"Hello, world! Projeto $ARTIFACT_ID criado com sucesso."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_TEST_JAVA/AppTest.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class AppTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testApp() {
|
||||||
|
assertTrue(true, "Teste básico de funcionamento.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$BASE_DIR/README.md" <<EOF
|
||||||
|
# $ARTIFACT_ID
|
||||||
|
|
||||||
|
Projeto Maven criado automaticamente com Java 25 e JUnit 5.
|
||||||
|
|
||||||
|
## Requisitos
|
||||||
|
|
||||||
|
- Java 25
|
||||||
|
- Maven
|
||||||
|
|
||||||
|
## Como compilar
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn compile
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Como executar
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn exec:java -Dexec.mainClass="$GROUP_ID.App"
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Como executar os testes
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn test
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Como gerar o pacote
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn package
|
||||||
|
\`\`\`
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Projeto '$ARTIFACT_ID' criado com sucesso."
|
||||||
|
echo "Java: 25"
|
||||||
|
echo
|
||||||
|
echo "Para testar:"
|
||||||
|
echo " cd '$ARTIFACT_ID'"
|
||||||
|
echo " mvn test"
|
||||||
|
echo " mvn exec:java -Dexec.mainClass=\"$GROUP_ID.App\""
|
||||||
202
create-spring-project.sh
Normal file
202
create-spring-project.sh
Normal file
|
|
@ -0,0 +1,202 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [ "$#" -lt 2 ]; then
|
||||||
|
echo "Uso: $0 <groupId> <artifactId>"
|
||||||
|
echo "Exemplo: $0 com.exemplo api-pessoas"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
GROUP_ID="$1"
|
||||||
|
ARTIFACT_ID="$2"
|
||||||
|
|
||||||
|
JAVA_VERSION="25"
|
||||||
|
SPRING_BOOT_VERSION="4.1.0"
|
||||||
|
|
||||||
|
PACKAGE_DIR="${GROUP_ID//./\/}"
|
||||||
|
BASE_DIR="$ARTIFACT_ID"
|
||||||
|
|
||||||
|
SRC_MAIN_JAVA="$BASE_DIR/src/main/java/$PACKAGE_DIR"
|
||||||
|
SRC_TEST_JAVA="$BASE_DIR/src/test/java/$PACKAGE_DIR"
|
||||||
|
SRC_MAIN_RESOURCES="$BASE_DIR/src/main/resources"
|
||||||
|
|
||||||
|
echo "Criando projeto Spring Boot..."
|
||||||
|
|
||||||
|
if [ -e "$BASE_DIR" ]; then
|
||||||
|
echo "Erro: diretório '$BASE_DIR' já existe."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$SRC_MAIN_JAVA"
|
||||||
|
mkdir -p "$SRC_TEST_JAVA"
|
||||||
|
mkdir -p "$SRC_MAIN_RESOURCES"
|
||||||
|
|
||||||
|
cat > "$BASE_DIR/pom.xml" <<EOF
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://maven.apache.org/POM/4.0.0
|
||||||
|
https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>$SPRING_BOOT_VERSION</version>
|
||||||
|
<relativePath/>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>$GROUP_ID</groupId>
|
||||||
|
<artifactId>$ARTIFACT_ID</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>$JAVA_VERSION</java.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-devtools</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_JAVA/App.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class App {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(App.class,args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_JAVA/HelloController.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
public class HelloController {
|
||||||
|
|
||||||
|
@GetMapping("/")
|
||||||
|
public String hello() {
|
||||||
|
return "Hello World!";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_TEST_JAVA/AppTest.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class AppTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testApp() {
|
||||||
|
assertNotNull(new App());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_RESOURCES/application.properties" <<EOF
|
||||||
|
spring.application.name=$ARTIFACT_ID
|
||||||
|
|
||||||
|
server.port=8080
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$BASE_DIR/README.md" <<EOF
|
||||||
|
# $ARTIFACT_ID
|
||||||
|
|
||||||
|
Projeto Spring Boot criado automaticamente.
|
||||||
|
|
||||||
|
## Requisitos
|
||||||
|
|
||||||
|
- Java $JAVA_VERSION
|
||||||
|
- Maven
|
||||||
|
|
||||||
|
## Executar
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn spring-boot:run
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
Acesse:
|
||||||
|
|
||||||
|
http://localhost:8080
|
||||||
|
|
||||||
|
## Testes
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn test
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Empacotar
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn clean package
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Executar o JAR
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
java -jar target/$ARTIFACT_ID-1.0-SNAPSHOT.jar
|
||||||
|
\`\`\`
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Projeto criado com sucesso."
|
||||||
|
echo
|
||||||
|
echo "Para executar:"
|
||||||
|
echo " cd $ARTIFACT_ID"
|
||||||
|
echo " mvn spring-boot:run"
|
||||||
|
echo
|
||||||
|
echo "Abra:"
|
||||||
|
echo " http://localhost:8080"
|
||||||
314
create-vaadin-project.sh
Normal file
314
create-vaadin-project.sh
Normal file
|
|
@ -0,0 +1,314 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [ "$#" -lt 2 ]; then
|
||||||
|
echo "Uso: $0 <groupId> <artifactId>"
|
||||||
|
echo "Exemplo: $0 com.exemplo vaadin-app"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
GROUP_ID="$1"
|
||||||
|
ARTIFACT_ID="$2"
|
||||||
|
|
||||||
|
JAVA_VERSION="25"
|
||||||
|
SPRING_BOOT_VERSION="4.1.0"
|
||||||
|
VAADIN_VERSION="25.2.1"
|
||||||
|
|
||||||
|
PACKAGE_DIR="${GROUP_ID//./\/}"
|
||||||
|
BASE_DIR="$ARTIFACT_ID"
|
||||||
|
|
||||||
|
SRC_MAIN_JAVA="$BASE_DIR/src/main/java/$PACKAGE_DIR"
|
||||||
|
SRC_TEST_JAVA="$BASE_DIR/src/test/java/$PACKAGE_DIR"
|
||||||
|
SRC_MAIN_RESOURCES="$BASE_DIR/src/main/resources"
|
||||||
|
|
||||||
|
echo "Criando projeto Vaadin + Spring Boot '$ARTIFACT_ID'..."
|
||||||
|
echo "Group ID: $GROUP_ID"
|
||||||
|
echo "Java: $JAVA_VERSION"
|
||||||
|
echo "Spring Boot: $SPRING_BOOT_VERSION"
|
||||||
|
echo "Vaadin: $VAADIN_VERSION"
|
||||||
|
|
||||||
|
if [ -e "$BASE_DIR" ]; then
|
||||||
|
echo "Erro: o diretório '$BASE_DIR' já existe."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$SRC_MAIN_JAVA"
|
||||||
|
mkdir -p "$SRC_TEST_JAVA"
|
||||||
|
mkdir -p "$SRC_MAIN_RESOURCES"
|
||||||
|
|
||||||
|
cat > "$BASE_DIR/pom.xml" <<EOF
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://maven.apache.org/POM/4.0.0
|
||||||
|
https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>$SPRING_BOOT_VERSION</version>
|
||||||
|
<relativePath/>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<groupId>$GROUP_ID</groupId>
|
||||||
|
<artifactId>$ARTIFACT_ID</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<name>$ARTIFACT_ID</name>
|
||||||
|
<description>Projeto Vaadin com Spring Boot</description>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>$JAVA_VERSION</java.version>
|
||||||
|
<vaadin.version>$VAADIN_VERSION</vaadin.version>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-bom</artifactId>
|
||||||
|
<version>\${vaadin.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-spring-boot-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-devtools</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-dev</artifactId>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-maven-plugin</artifactId>
|
||||||
|
<version>\${vaadin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>prepare-frontend</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
|
||||||
|
<profile>
|
||||||
|
<id>production</id>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-core</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-dev</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.vaadin</groupId>
|
||||||
|
<artifactId>vaadin-maven-plugin</artifactId>
|
||||||
|
<version>\${vaadin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>build-frontend</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</profile>
|
||||||
|
|
||||||
|
</profiles>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_JAVA/App.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class App {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(App.class, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_JAVA/MainView.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import com.vaadin.flow.component.button.Button;
|
||||||
|
import com.vaadin.flow.component.html.H1;
|
||||||
|
import com.vaadin.flow.component.notification.Notification;
|
||||||
|
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
||||||
|
import com.vaadin.flow.router.Route;
|
||||||
|
import com.vaadin.flow.theme.lumo.LumoUtility;
|
||||||
|
|
||||||
|
@Route("")
|
||||||
|
public class MainView extends VerticalLayout {
|
||||||
|
|
||||||
|
public MainView() {
|
||||||
|
setSizeFull();
|
||||||
|
setAlignItems(Alignment.CENTER);
|
||||||
|
setJustifyContentMode(JustifyContentMode.CENTER);
|
||||||
|
|
||||||
|
H1 titulo = new H1("$ARTIFACT_ID");
|
||||||
|
titulo.addClassName(LumoUtility.Margin.NONE);
|
||||||
|
|
||||||
|
Button botao = new Button(
|
||||||
|
"Clique aqui",
|
||||||
|
evento -> Notification.show(
|
||||||
|
"Olá, mundo!",
|
||||||
|
3000,
|
||||||
|
Notification.Position.TOP_CENTER
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
add(titulo, botao);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_TEST_JAVA/AppTest.java" <<EOF
|
||||||
|
package $GROUP_ID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class AppTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void aplicacaoPodeSerInstanciada() {
|
||||||
|
App app = new App();
|
||||||
|
|
||||||
|
assertNotNull(app);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$SRC_MAIN_RESOURCES/application.properties" <<EOF
|
||||||
|
spring.application.name=$ARTIFACT_ID
|
||||||
|
|
||||||
|
server.port=8080
|
||||||
|
|
||||||
|
vaadin.launch-browser=true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$BASE_DIR/README.md" <<EOF
|
||||||
|
# $ARTIFACT_ID
|
||||||
|
|
||||||
|
Projeto criado automaticamente com:
|
||||||
|
|
||||||
|
- Java $JAVA_VERSION
|
||||||
|
- Spring Boot $SPRING_BOOT_VERSION
|
||||||
|
- Vaadin $VAADIN_VERSION
|
||||||
|
- Maven
|
||||||
|
|
||||||
|
## Executar em modo de desenvolvimento
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn spring-boot:run
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
Depois acesse:
|
||||||
|
|
||||||
|
\`\`\`text
|
||||||
|
http://localhost:8080
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Executar os testes
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn test
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Gerar pacote de desenvolvimento
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn clean package
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Gerar pacote de produção
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
mvn clean package -Pproduction
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
O arquivo gerado estará em:
|
||||||
|
|
||||||
|
\`\`\`text
|
||||||
|
target/$ARTIFACT_ID-1.0-SNAPSHOT.jar
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
## Executar o JAR
|
||||||
|
|
||||||
|
\`\`\`bash
|
||||||
|
java -jar target/$ARTIFACT_ID-1.0-SNAPSHOT.jar
|
||||||
|
\`\`\`
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Projeto '$ARTIFACT_ID' criado com sucesso."
|
||||||
|
echo
|
||||||
|
echo "Para executar:"
|
||||||
|
echo " cd '$ARTIFACT_ID'"
|
||||||
|
echo " mvn spring-boot:run"
|
||||||
|
echo
|
||||||
|
echo "Acesse: http://localhost:8080"
|
||||||
Loading…
Reference in a new issue