DEV Community

Cover image for Cursos que formaram meu caráter: Desenvolvimento web com Quarkus - Saudades do Maven, relatórios com Project-report
Arthur Fonseca
Arthur Fonseca

Posted on • Edited on

Cursos que formaram meu caráter: Desenvolvimento web com Quarkus - Saudades do Maven, relatórios com Project-report

"Um site ruim é como um vendedor rabugento". Jakob Nielsen

Nesse quarto posts falaremos sobre um ponto que não gera muito impacto no projeto, mas que eu acho mais elegante a opção com Maven.

O ponto é como trazer diferentes perspectivas sobre o nosso projeto em um único lugar (o que não consegui com o Gradle).

Esse artigo faz parte de uma série, abaixo é possível encontrar a lista completa de artigos.

Estamos nos baseando no curso Desenvolvimento web com Quarkus do @viniciusfcf.

O repositório que estamos utilizando é:


Tradeoffs

Sad Bart Simpson GIF - Find & Share on GIPHY

Discover & share this The Simpsons GIF with everyone you know. GIPHY is how you search, share, discover, and create GIFs.

favicon giphy.com

Sabe aquela conversa que o "nosso produto é melhor que o do concorrente em todos os aspectos"? Pois bem...

Brincadeiras à parte, o objetivo desse post está mais em enaltecer uma abordagem do Maven pouco utilizada para documentação.

É sr Tim eu sei como você se sente:

8

Is there a plugin in gradle which can generate maven site similar thing? It would be great if it was compatible with current maven site apt format file.

Mas o que afinal de contas o Maven Site faz?

Maven Site Plugin é um plugin que cria relatórios do projeto. Um ponto interessante é que mais do que criar os relatórios do plugin, também é possível integrar com relatórios de Testes, Versão de dependências, dentre outros.

Peguemos por exemplo o código do JUnit 4, com o código escrito no pom.xml é possível chegar ao seguinte resultado:

Observem as informações que são possível de serem documentadas, como informações sobre configuração da biblioteca, licença do projeto, desenvolvedores, dentre outras.

Pela nostalgia voltei até aquele projeto que eu tinha falado no post sobre a mudança de Maven para Gradle e voltando para a configuração do Maven, rodei o famoso:

foo@bar:~$ ./mvnw site
Enter fullscreen mode Exit fullscreen mode

Project Information

Dependency Convergence

 Dependency Updates Report

 Plugin Updates Report

 Property Updates Report

Alguns reports interessantes são os de versão de dependências e plugins, que ficam mais bonitos que os nossos usando o Gradle Plugin Version.

Mas e com o Gradle?

Bom... como nem tudo são flores, o que consegui com o Gradle foi o plugin Project-Report:

A configuração dele está no build.gradle:

subprojects {
    if (it.name != 'applications') {
        ...
        apply from: "$rootDir/plugins/docs.gradle"
    }
}
Enter fullscreen mode Exit fullscreen mode

e em plugins/docs.gradle:

...
apply plugin: "project-report"

...

htmlDependencyReport {
    projects = project.allprojects
}
Enter fullscreen mode Exit fullscreen mode

Com ele, podemos executar a task dependencyReport, que gerará um report dentro da pasta build de cada subprojeto nosso como o seguinte:


------------------------------------------------------------
Project ':applications:cadastro'
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
+--- org.mapstruct:mapstruct-processor:1.5.3.Final
\--- io.quarkus:quarkus-panache-common:2.14.3.Final
     +--- io.quarkus:quarkus-core:2.14.3.Final
     |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
     |    +--- jakarta.enterprise:jakarta.enterprise.cdi-api:2.0.2
     |    |    +--- jakarta.el:jakarta.el-api:3.0.3
     |    |    +--- jakarta.interceptor:jakarta.interceptor-api:1.2.5
     |    |    |    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
     |    |    |    \--- jakarta.ejb:jakarta.ejb-api:3.2.6
     |    |    |         \--- jakarta.transaction:jakarta.transaction-api:1.3.2 -> 1.3.3
     |    |    \--- jakarta.inject:jakarta.inject-api:1.0
     |    +--- jakarta.inject:jakarta.inject-api:1.0
     |    +--- io.quarkus:quarkus-ide-launcher:2.14.3.Final
     |    +--- io.quarkus:quarkus-development-mode-spi:2.14.3.Final
     |    +--- io.smallrye.config:smallrye-config:2.12.1
     |    |    +--- io.smallrye.config:smallrye-config-core:2.12.1
     |    |    |    +--- org.eclipse.microprofile.config:microprofile-config-api:2.0.1
     |    |    |    +--- io.smallrye.common:smallrye-common-annotation:1.13.1
     |    |    |    +--- io.smallrye.common:smallrye-common-expression:1.13.1
     |    |    |    |    +--- io.smallrye.common:smallrye-common-function:1.13.1
     |    |    |    |    |    \--- io.smallrye.common:smallrye-common-constraint:1.13.1
     |    |    |    |    |         \--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.0.Final
     |    |    |    |    \--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.0.Final
     |    |    |    +--- io.smallrye.common:smallrye-common-constraint:1.13.1 (*)
     |    |    |    +--- io.smallrye.common:smallrye-common-classloader:1.13.1
     |    |    |    +--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.0.Final
     |    |    |    +--- org.ow2.asm:asm:9.3
     |    |    |    \--- io.smallrye.config:smallrye-config-common:2.12.1
     |    |    |         +--- org.eclipse.microprofile.config:microprofile-config-api:2.0.1
     |    |    |         +--- io.smallrye.common:smallrye-common-classloader:1.13.1
     |    |    |         \--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.0.Final
     |    |    \--- org.jboss.logging:jboss-logging:3.4.3.Final -> 3.5.0.Final
     |    +--- org.jboss.logging:jboss-logging:3.5.0.Final
     |    +--- org.jboss.logmanager:jboss-logmanager-embedded:1.0.11
     |    |    \--- org.wildfly.common:wildfly-common:1.5.0.Final-format-001 -> 1.5.4.Final-format-001
     |    +--- org.jboss.logging:jboss-logging-annotations:2.2.1.Final
     |    +--- org.jboss.threads:jboss-threads:3.4.3.Final
     |    |    +--- org.jboss.logging:jboss-logging:3.4.1.Final -> 3.5.0.Final
     |    |    \--- org.wildfly.common:wildfly-common:1.5.0.Final -> 1.5.4.Final-format-001
     |    +--- org.slf4j:slf4j-api:1.7.36
     |    +--- org.jboss.slf4j:slf4j-jboss-logmanager:1.2.0.Final
     |    +--- org.graalvm.sdk:graal-sdk:22.3.0
     |    +--- org.wildfly.common:wildfly-common:1.5.4.Final-format-001
     |    +--- io.quarkus:quarkus-bootstrap-runner:2.14.3.Final
     |    |    +--- io.smallrye.common:smallrye-common-io:1.13.2
     |    |    +--- org.jboss.logmanager:jboss-logmanager-embedded:1.0.11 (*)
     |    |    +--- org.jboss.logging:jboss-logging:3.5.0.Final
     |    |    \--- io.github.crac:org-crac:0.1.1
     |    \--- io.quarkus:quarkus-fs-util:0.0.9
Enter fullscreen mode Exit fullscreen mode

O report é bem maior que isso, dado o número de dependências que temos, cortei para não ficar tão grande.

Temos a task htmlDependencyReport que gera um report em HTML dentro da pasta build de cada subprojeto nosso como o seguinte:

htmlDependencyReport

Um ponto que precisei alterar no nosso projeto foi a configuração org.gradle.jvmargs=-Xmx4096m em gradle.properties.

./gradlew clean htmlDependencyReport

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':applications:cadastro:htmlDependencyReport'.
> Java heap space

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 16s
Enter fullscreen mode Exit fullscreen mode

Antes eu estava recebendo problemas de heap space no Java, para isso, aumentei a quantidade de RAM que o Gradle pode usar, como mencionado aqui:

I am getting gradle build error while running the app. I am using windows 10 with 8GB RAM, Android studio version 4.0.1

Out of memory: Java heap space. Please assign more memory to Gradle in the project's gradle.properties file. For example, the following line in the gradle.properties file, sets the…


Conclusão

Bad quality comparation

É... não tem nem como comparar a robustez e relatórios da solução com Maven, ainda que o Maven Site precise dar um tapa na parte de UI e UX, ainda sim os insights e relatórios que podemos disponibilizar são bem interessantes.

Para quem usa o Gradle e conhecer algum outro plugin para a mesma finalidade, sou todo ouvidos.


Esse post faz parte de uma série sobre Cursos que formaram meu caráter: Desenvolvimento web com Quarkus.

A série completa é:

Top comments (0)