{"id":36425977,"url":"https://github.com/kyriosdata/exemplo","last_synced_at":"2026-01-11T18:00:34.242Z","repository":{"id":44816161,"uuid":"65920397","full_name":"kyriosdata/exemplo","owner":"kyriosdata","description":"Organização básica de projeto em Java (um ponto de partida)","archived":false,"fork":false,"pushed_at":"2025-01-31T17:36:01.000Z","size":479,"stargazers_count":100,"open_issues_count":15,"forks_count":84,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-04T03:42:28.544Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kyriosdata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2016-08-17T15:43:07.000Z","updated_at":"2025-07-02T12:13:54.000Z","dependencies_parsed_at":"2023-11-14T18:43:06.922Z","dependency_job_id":"547ce7a5-f4c1-4e45-a66a-a86c30fbc178","html_url":"https://github.com/kyriosdata/exemplo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kyriosdata/exemplo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fexemplo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fexemplo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fexemplo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fexemplo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kyriosdata","download_url":"https://codeload.github.com/kyriosdata/exemplo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kyriosdata%2Fexemplo/sbom","scorecard":{"id":575683,"data":{"date":"2025-08-11","repo":{"name":"github.com/kyriosdata/exemplo","commit":"d83e1c512ab563209f00211c499e2149bf007c78"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/25 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: .gitpod.Dockerfile:1: pin your Docker image by updating gitpod/workspace-java-17 to gitpod/workspace-java-17@sha256:8b9b4751ddd82ceb431a48c6cd121d71e2de019b5798b95d76cfc9df1bdc4421","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating fabric8/java-alpine-openjdk8-jre to fabric8/java-alpine-openjdk8-jre@sha256:281bc06f236d3a18c5c1b29a4cd45f33c49e3513a7ad1cb8b96f6911b33d495d","Warn: containerImage not pinned by hash: Dockerfile.jdk11:1: pin your Docker image by updating kyriosdata/jdk11 to kyriosdata/jdk11@sha256:7d13330531a54475eb6e761ade29540a596569b1365ce294f25cb112a9df2a06","Info:   0 out of   3 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 5 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"27 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-vmq6-5m68-f53m","Warn: Project is vulnerable to: GHSA-6v67-2wr5-gvf4","Warn: Project is vulnerable to: GHSA-pr98-23f8-jwxv","Warn: Project is vulnerable to: GHSA-27hp-xhwr-wr2m","Warn: Project is vulnerable to: GHSA-3p2h-wqq4-wf4h","Warn: Project is vulnerable to: GHSA-5j33-cvvr-w245","Warn: Project is vulnerable to: GHSA-7w75-32cg-r6g2","Warn: Project is vulnerable to: GHSA-83qj-6fr2-vhqg","Warn: Project is vulnerable to: GHSA-fccv-jmmp-qg76","Warn: Project is vulnerable to: GHSA-ff77-26x5-69cr","Warn: Project is vulnerable to: GHSA-h2fw-rfh5-95r3","Warn: Project is vulnerable to: GHSA-h3gc-qfqq-6h8f","Warn: Project is vulnerable to: GHSA-wc4r-xq3c-5cf3","Warn: Project is vulnerable to: GHSA-wm9w-rjj3-j356","Warn: Project is vulnerable to: GHSA-v682-8vv8-vpwr","Warn: Project is vulnerable to: GHSA-rc42-6c7j-7h5r","Warn: Project is vulnerable to: GHSA-4gc7-5j7h-4qph","Warn: Project is vulnerable to: GHSA-4wp7-92pw-q264","Warn: Project is vulnerable to: GHSA-2rmj-mq67-h97g","Warn: Project is vulnerable to: GHSA-2wrp-6fg6-hmc5","Warn: Project is vulnerable to: GHSA-6r3c-xf4w-jxjm","Warn: Project is vulnerable to: GHSA-ccgv-vj62-xf9h","Warn: Project is vulnerable to: GHSA-hgjh-9rj2-g67j","Warn: Project is vulnerable to: GHSA-cx7f-g6mp-7hqm","Warn: Project is vulnerable to: GHSA-g5vr-rgqm-vf78","Warn: Project is vulnerable to: GHSA-v94h-hvhg-mf9h","Warn: Project is vulnerable to: GHSA-mjmj-j48q-9wg2"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T17:38:43.575Z","repository_id":44816161,"created_at":"2025-08-20T17:38:43.575Z","updated_at":"2025-08-20T17:38:43.575Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28316887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-11T18:00:19.157Z","updated_at":"2026-01-11T18:00:34.219Z","avatar_url":"https://github.com/kyriosdata.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://app.travis-ci.com/kyriosdata/exemplo.svg)](https://app.travis-ci.com/github/kyriosdata/exemplo)\n[![SonarCloud Status](https://sonarcloud.io/api/project_badges/measure?project=com.github.kyriosdata%3Aexemplo\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=com.github.kyriosdata%3Aexemplo)\n[![Known Vulnerabilities](https://snyk.io/test/github/kyriosdata/exemplo/badge.svg?targetFile=pom.xml)](https://snyk.io/test/github/kyriosdata/exemplo)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.kyriosdata/exemplo/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.kyriosdata/exemplo)\n\n## Escopo, pré-requisitos e objetivo\n\n_Projeto que serve de referência para o desenvolvimento de software em Java_.\n\nÉ um projeto proposto para ser clonado e reutilizado, faz uso de \nSpring Boot 3, JDK 17 (exigido) e Maven 3.8.6.\n\nHá um conjunto relativamente extenso de ferramentas para avaliação \ndo código do projeto, o que é\num bom ponto de partida para implementação de DevOps.\n\nPara ilustrar o projeto inclui:\n(a) uma biblioteca formada por um único método que identifica o dia da semana para uma data fornecida;\n(b) uma aplicação que oferece tal funcionalidade via linha de comandos e (c) uma RESTFul API ambas para acesso à funcionalidade da biblioteca.\n\n\u003e _Objetivo: ilustrar uma organização de código em Java usando\n\u003e \"boas práticas\" para inspirar projetos reais_.\n\n## Iniciando...\n\n- `git clone https://github.com/kyriosdata/exemplo`\n- `cd exemplo`\n\nAgora você poderá executar os vários comandos abaixo.\n\n## Pré-requisitos\n\n- `mvn --version`\u003cbr\u003e\n  você deverá ver a indicação da versão do Maven instalada e\n  a versão do JDK, dentre outras. Observe que o JDK é obrigatório, assim como\n  a definição das variáveis de ambiente **JAVA_HOME** e **M2_HOME**.\n\n## Limpar, compilar, executar testes de unidade e cobertura\n\n- `mvn clean`\u003cbr\u003e\n  remove diretório _target_\n\n- `mvn compile`\u003cbr\u003e\n  compila o projeto, deposita resultados no diretório _target_\n\n- `mvn test`\u003cbr\u003e\n  executa todos os testes do projeto. Para executar apenas parte dos testes, por exemplo,\n  aqueles contidos em uma dada classe execute `mvn -Dtest=NomeDaClasseTest test`. Observe\n  que o sufixo do nome da classe de teste é `Test` (padrão recomendado). Para executar um\n  único teste `mvn -Dtest=NomeDaClasseTest#nomeDoMetodo test`.\n\n- `mvn verify -P cobertura`\u003cbr\u003e\n  executa testes de unidade e produz relatório de\n  cobertura em _target/site/jacoco/index.html_ além de verificar se limite mínimo\n  de cobertura, conforme configurado, é satisfeito.\n\n## Produzindo código executável (depende da JVM)\n\n- `mvn package`\u003cbr\u003e\n  gera arquivo _exemplo.jar_ no diretório _target_. Observe que\n  o arquivo gerado não é executável. Um arquivo jar é um arquivo no formato\n  zip. Você pode verificar o conteúde deste arquivo ao executar o comando `jar vft exemplo.jar`.\n\n- `mvn package -P executavel-dir`\u003cbr\u003e\n  gera _exemplo-dir.jar_, executável, mas dependente do diretório _jars_,\n  também criado no diretório _target_. Para executar basta o comando\n  `java -jar target/exemplo-dir.jar`. Observe que se o diretório _jars_ for\n  removido, então este comando falha. Por último, o diretório _jars_ deve\n  ser depositado no mesmo diretório do arquivo _exemplo.jar_. A execução deste\n  arquivo refere-se à aplicação via linha de comandos.\n\n- `mvn package -P executavel-unico`\u003cbr\u003e\n  gera jar executável correspondente ao aplicativo a ser executado via linha de comandos,\n  em um único arquivo, _target/exemplo-unico.jar_,\n  suficiente para ser transferido e executado. Para executá-lo basta o\n  comando `java -jar target/exemplo-unico.jar`.\n\n- `mvn package -P api`\u003cbr\u003e\n  gera jar executável juntamente com todas as dependências reunidas em um único arquivo,\n  _target/api.jar_. Este arquivo jar pode ser transferido para outro diretório\n  ou máquina e ser executado pelo comando `java -jar target/api.jar`. \n\nA execução e exemplos de chamadas são fornecidos na seção seguinte.\n\n## Executando a aplicação e a RESTFul API\n\n- `mvn exec:java -Dexec.mainClass=\"nome.completo.Classe\" -Dexec.args=\"arg1 arg2\"`\u003cbr\u003e\n  executa o método _main_ da classe indicada na configuração do _plugin_ pertinente\n  no arquivo pom.xml. Depende de `mvn compile`.\n\n- `java -jar target/exemplo-unico.jar`\u003cbr\u003e\n  executa o aplicativo por meio do arquivo jar criado pelo comando `mvn package -P executavel-unico`, conforme comentado anteriormente. Observe que o comando\n  anterior e o corrente produzem o mesmo efeito, contudo, o arquivo jar\n  permite que seja enviado para um outro diretório ou outro computador,\n  onde pode ser executado, enquanto o comando anterior (acima) exige,\n  inclusive, a disponibilidade do Maven (o que pode ser útil em tempo de\n  desenvolvimento).\n\n- `java -jar target/api.jar` ou ainda `mvn spring-boot:run`\u003cbr\u003e\n  coloca em execução a API gerada por `mvn package -P api` na porta padrão (8080). Para fazer uso de porta\n  diferente use `java -jar -Dserver.port=9876 target/api.jar`, por exemplo. Requisições podem ser\n  submetidas conforme abaixo:\n  - Abra o endereço _http://localhost:8080/ds_ no seu navegador, ou forneça\n    a seguinte URL para um dia específico\n    _http://localhost:8080/ds?data=01-01-2015_.\n  - Via linha de comandos (curl), `curl http://localhost:8080/ds` ou `curl http://localhost:8080/ds?data=01-01-200`.\n  - Página HTML (há uma interface gráfica) no diretório **gui**, basta abrir\n    o arquivo [index.html](http://htmlpreview.github.com/?https://raw.githubusercontent.com/kyriosdata/exemplo/master/gui/index.html).\n\n## Produzindo código executável (native image) (em testes)\n\n- Depende de GraalVM.\n- JDK 17\n- Visual Studio (Windows)\n- `mvn -P native native:compile`\n\n## Documentação\n\n- `mvn javadoc:javadoc`\u003cbr\u003e\n  produz documentação do projeto depositada em\n  _target/site/apidocs/index.html_. Este comando está configurado para\n  o JDK 9.\n\n- `mvn jxr:jxr`\u003cbr\u003e\n    Produz documentação do código fonte depositada em\n    _target/site/xref/index.html_.\n\n## Análise estática\n\nTrata-se da análise do código sem que seja executado. Esta análise produz\numa \"noção de quão bom\" está o código sob alguns aspecto e, em consequência,\npermite orientar eventuais ações de melhoria. Fique atento, \"sair\nbem\" na análise estática não significa que \"agrada usuários\". A análise\nestática observa o código.\n\nTodas estas análises devem ser realizadas em todos os projetos? Não!\nAquelas relevantes para um dado projeto deverão ser\nconfiguradas em conformidade com o contexto em questão.\n\n- **Checkstyle**\n\n  - `mvn checkstyle:checkstyle`\u003cbr\u003e\n    gera análise de estilo em _target/site/checkstyle.html_.\n    Observe que o uso do plugin\n    **jxr** é necessário para geração de relatório do código fonte referenciável\n    pelo relatório gerado pelo Checkstyle. Contudo, o uso do **jxr** não é\n    obrigatório.\n\n  - `mvn checkstyle:check`\u003cbr\u003e\n    faz com que o _build_ falhe se pelo menos\n    um estilo é violado\n\n- **Dependency Check (vulnerabilidades)**\n\n  - `mvn verify -P owasp`\u003cbr\u003e\n    análise de vulnerabilidades depositadas em\n    _target/dependency-check-report.html_. A primeira execução é relativamente\n    \"longa\", esteja preparado para esperar...\n\n- **JavaNCSS**\n\n  - `mvn javancss:check`\u003cbr\u003e\n    verifica limites de complexidade ciclomática (CC) e de linhas\n    de código sem comentário (NCSS). Este comando depende da compilação\n    prévia, ou seja _mvn compile_\n\n  - `mvn javancss:report`\u003cbr\u003e\n    gera relatório em _target/site/javancss.html_ e\n    também depende de compilação prévia, ou seja, _mvn compile_\n\n- **JDepend**\n\n  - `mvn jdepend:generate`\u003cbr\u003e\n    gera relatório de algumas métricas, inclusive presença de ciclos em _target/site/jdepend-report.html_\n\n- **PMD**\n\n  - `mvn jxr:jxr pmd:pmd`\u003cbr\u003e\n    gera relatório em _target/site/pmd.html_. Observe que o uso do plugin\n    **jxr** é necessário para geração de relatório do código fonte referenciável\n    pelo relatório perado pelo PMD. Contudo, o uso do **jxr** não é obrigatório.\n\n  - `mvn pmd:check`\u003cbr\u003e\n    falha se pelo menos uma regra é violada\n\n  - `mvn jxr:jxr pmd:cpd`\u003cbr\u003e\n    gera relatório de duplicidades encontradas. Observe que o uso do plugin\n    **jxr** é necessário para geração de relatório do código fonte referenciável\n    pelo relatório gerado pelo PMD. Contudo, o uso do **jxr** não é obrigatório. O \n    resultado é depositado no arquivo _target/site/cpd.html_.\n\n- **Spotbugs**\n\n  - `mvn spotbugs:spotbugs`\u003cbr\u003e\n    detecção de bugs. Resultado em _target/spotbugs.html_.\n  - `mvn spotbugs:check`\u003cbr\u003e\n    apenas verifica se há erros\n  - `mvn spotbugs:gui`\u003cbr\u003e\n    abre GUI para exibir bugs após _mvn spotbugs:spotbugs_\n\n- **Spotbugs** (security)\n\n  - `mvn spotbugs:spotbugs -P security`\u003cbr\u003e\n    detecção de bugs. Resultado em _target/spotbugs.html_.\n  - `mvn spotbugs:check -P security`\u003cbr\u003e\n    apenas verifica se há erros\n  - `mvn spotbugs:gui -P security`\u003cbr\u003e\n    abre GUI para exibir bugs após _mvn spotbugs:spotbugs -P security_\n\n- **Snyk**\n\n  - `mvn snyk:test -P security`\u003cbr\u003e\n    Realiza a análise de vulnerabilidade oferecida pelo serviço [Snyk](https://snyk.io).\n    Defina a variável de ambiente **SNYK_TOKEN** com o valor do _token_\n  de acesso ao serviço. \n\n  - `mvn snyk:monitor -P security`\u003cbr\u003e\n    Disponibiliza relatório em snyk.io (atualiza _badge_)\n\n## Relatório do projeto\n\n- `mvn package site -P cobertura` \u003cbr\u003e\n  Gera documentação do projeto, incluindo relatórios de análises estáticas em\n  _target/site/index.html_.\n\n- `mvn site:run` executa serviço que disponibiliza em http://localhost:8080 a\n  documentação gerada no passo anterior.\n\n## Disponibilizando biblioteca no repositório Maven Central\n\nA boa notícia é que este _pom.xml_ está devidamente configurado para\npublicação no Maven Central, contudo, depende de outras ações e da\nconfiguração do arquivo _HOMEDIR/.m2/settings.xml_.\n\n- **Nexus Staging Maven Plugin**\n  - `mvn deploy -P deploy`\u003cbr\u003e\n\nA publicação usando o Maven Central é mais\ncomplexa do que a alternativa recente oferecida pelo [JitPack](https://jitpack.io),\nou até mesmo pelo Github Packages, por exemplo.\n\n## Dependências\n\nO desenvolvimento de código em Java, em geral, usufrui de um significativo conjunto de bibliotecas e _frameworks_. Esta\nreutilização é incorporada em um projeto por meio de dependências. Gerenciá-las\ntorna-se necessário e há dois _plugins_ úteis para tal. Consulte a documentação deles\npara outros além daqueles ilustrados abaixo: Version Maven Plugin ([aqui](http://www.mojohaus.org/versions-maven-plugin/)) e Apache Maven Dependency Plugin ([aqui](https://maven.apache.org/plugins/maven-dependency-plugin/)).\n\n- `mvn versions:display-dependency-updates`\u003cbr\u003e\n  Lista dependências para as quais há versões mais recentes do que aquelas empregadas.\n\n- `mvn versions:display-plugin-updates`\u003cbr\u003e\n  Lista _plugins_ para as quais há versões mais recentes do que aquelas empregadas.\n\n- `mvn dependency:analyze`\u003cbr\u003e\n  Analisar as dependências de um projeto. Dependência citada mas não utilizada, dentre\n  outras situações são relatadas por meio desta análise.\n\n- `mvn dependency:purge-local-repository`\u003cbr\u003e\n  limpa dependências do projeto em questão do repositório local e obtém dependências novamente. Útil quando o repositório local é corrompido.\n\n- `mvn dependency:copy-dependencies`\u003cbr\u003e\n  Copia dependências do projeto para o diretório **target/dependency**.\n\n## Banco de Dados H2\n\nNos cenários onde é feito uso de um banco\nrelacional, aqui são oferecidos recursos para desenvolvimento usando o\nH2 (https://www.h2database.com).\n\n- `mvn exec:java -P start-shell-h2`\u003cbr\u003e\n  Abre/cria banco para uso via linha de comandos.\n  Para criar o banco de nome `bancoNome` no diretório `dir` forneça\n  `jdbc:h2:\u003cdir\u003e/bancoNome`. Se existir, apenas será aberto.\n  Adicionalmente, forneça como _driver_ a classe `org.h2.Driver`.\n  Você pode fazer uso do diretório de sua\n  preferência, contudo, a sugestão é criar o banco no diretório `target`\n  (usado pelo comando seguinte). Na _shell_ que é aberta, digite `create table teste (id int primary key, nome varchar(255));` para criar uma tabela de teste. Para inserir um registro, digite `insert into teste values (1, 'teste');`. Para listar os registros, digite `select * from teste;`. Para sair, digite `exit`.\n\n- `mvn exec:java -P start-h2-dev-in-target`\u003cbr\u003e\n  Este comando abre uma interface gráfica, via _browser_, no endereço\n  http://localhost:8082 com permissão para criar bancos no diretório **target**. Ou seja, é uma opção apenas para experimentação e durante desenvolvimento. Observe que o comando anterior permite interagir\n  com o banco via linha de comandos. Este comando, ao contrário, assume que o banco a ser aberto está no diretório `target`.\n  Quando fornecer a URL, use `.` para representar tal diretório.\n\n## Outros recursos\n\n- `mvn help:effective-pom`\u003cbr\u003e\n  exibe POM de fato empregado\n\n- `mvn help:describe -Dcmd=clean`\u003cbr\u003e\n  exibe detalhes da fase _clean_\n\n## Integração contínua\n\nNotou os emblemas (_badges_) no início da página? Todo _commit_ na presente\npágina automaticamente irá realizar uma série de operações, como compilação,\nexecução dos testes de unidade e várias análises estáticas. O resultado\ngeral é imediatamente acessível por meio dos emblemas (clique neles),\nonde detalhes são disponibilizados nas páginas correspondentes.\nObserve que isso se transforma em um significativo **instrumento\nde visibilidade do projeto**.\n\nPara projetos _open source_ os serviços oferecidos são gratuitos. Seguem aqui os\nmerecidos agradecimentos a:\n\n- https://travis-ci.com\n- https://sonarcloud.io\n- https://snyk.io\n\nA lista acima não tem a pretensão de ser exclusiva. Abaixo seguem outros serviços:\n\n- https://www.codacy.com/\n- https://codescene.io/\n- https://codecov.io/\n- http://circleci.com/\n- https://codeclimate.com/quality/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyriosdata%2Fexemplo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkyriosdata%2Fexemplo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkyriosdata%2Fexemplo/lists"}