[CircleCI] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test

circle-ci

Falha ao executar os testes com o CircleCI:

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test

org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called

at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:669)

Stack do erro:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.569 s
[INFO] Finished at: 2019-05-23T12:49:29Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project music-store-api: There are test failures.
[ERROR] 
[ERROR] Please refer to /home/circleci/repo/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /home/circleci/repo && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -jar /home/circleci/repo/target/surefire/surefirebooter2181446008377863749.jar /home/circleci/repo/target/surefire 2019-05-23T12-49-29_338-jvmRun1 surefire9019672418897110819tmp surefire_06824344050207374070tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /home/circleci/repo && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -jar /home/circleci/repo/target/surefire/surefirebooter2181446008377863749.jar /home/circleci/repo/target/surefire 2019-05-23T12-49-29_338-jvmRun1 surefire9019672418897110819tmp surefire_06824344050207374070tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] 	at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:669)
[ERROR] 	at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:282)
[ERROR] 	at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR] 	at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1183)
[ERROR] 	at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1011)
[ERROR] 	at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857)
[ERROR] 	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR] 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
[ERROR] 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
[ERROR] 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
[ERROR] 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR] 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR] 	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
[ERROR] 	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
[ERROR] 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
[ERROR] 	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
[ERROR] 	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
[ERROR] 	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR] 	at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
[ERROR] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] 	at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR] 	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Exited with code 1

Para corrigir basta adicionarmos o seguinte plugin no POM do projeto:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
</plugin>

[Python / PyCharm] ModuleNotFoundError: No module named ‘distutils.core’ (Can’t install virtual interpreter in PyCharm in Linux)

pycharm-python-error

Erro ao criar um Projeto com VirtualVenv no PyCharm:

ModuleNotFoundError: No module named ‘distutils.core’

Solução:

$sudo apt-get install python3-distutils

[JAVA / MAVEN] – Projeto de exemplo de um Archetype em Java (How to create archetype – project sample)

add_archetype

Helpdev Archetype

Esse projeto pode ser utilizado como exemplo para criar seu próprio archetype, ele contém configurações de como criar uma classe com nome dinâmico, como criar variáveis para ser substituídas no código, importar README, .gitignore etc.

Especificamente nesse projeto o archetype foi definido para criar uma estrutura de pastas padronizados, criar uma Main class com o nome do projeto tudo dentro do package adequado ( group id + artifact id ), de acordo com necessidades de projetos em produção ele também cria uma pasta externa de properties com um arquivo contendo o artifact id como nome.

https://github.com/gbzarelli/archetype-java

https://github.com/gbzarelli/archetype-spring

Java / JVM – Trabalhando com a Variável de Ambiente LD_LIBRARY_PATH

java

A variável de ambiente LD_LIBRARY_PATH informa aos aplicativos do Linux, como a JVM, onde localizar bibliotecas compartilhadas quando elas estão localizadas em um diretório diferente do diretório especificado na seção do cabeçalho do programa.

As bibliotecas compartilhadas para o SDK estão em /usr/java7/jre/lib// e /usr/java7/jre/lib//j9vm, em que é um dos seguintes:
Linux PPC de 32 bits: ppc
Linux PPC de 64 bits: ppc64
Linux 390 de 31 bits: s390
Linux 390 de 64 bits: s390x
Linux de 32 bits: i386
Linux de 64 bits: amd64
Os programas ativadores do SDK, incluindo java, javac e jar procuram esses diretórios automaticamente. O diretório-pai é geralmente /usr/java7/, mas os pacotes que empacotam o Java™ podem usar diretórios diferentes. Este caminho já está configurado pelos programas ativadores deJava tais como java, javac ou jar.

Configure LD_LIBRARY_PATH se uma das seguintes condições se aplicar:
Você estiver utilizando outras bibliotecas compartilhadas (incluindo as bibliotecas nativas JNI que você utiliza ou desenvolve). Configure LD_LIBRARY_PATH para incluir o diretório ou diretórios que contêm as bibliotecas.
Você estiver usando a API de Chamada de JNI para chamar o código Java a partir do aplicativo C/C++. Configure LD_LIBRARY_PATH para incluir os diretórios que contém as bibliotecas JVM além dos diretórios que contêm suas próprias bibliotecas.

Fonte: https://www.ibm.com/support/knowledgecenter/pt-br/SSYKE2_7.0.0/com.ibm.java.lnx.70.doc/user/setlpath.html

Android – Compartilhar código entre teste unit e instrumental ( Sharing code between unit tests and instrumentation tests on Android )

android_testing-1

Suponhamos que você tenha uma aplicação android com uma serie de testes. Alguns deles são testes unitários (unit tests), localizados em: src/test, e testes instrumentais (intrumentation tests), localizados em: src/androidTest.

O problema encontrado é que muitas vezes temos códigos que poderiam ser compartilhados entre esses testes, mas não temos como fazer isso pois estão em pastas diferentes, e não seria adequado inserir esses códigos auxiliares no src/main.

A solução encontrada é acrescentar um novo pacote de testes que seja compartilhado entre o src/test e o src/androidTest, para isso vamos criar um src/sharedTest e configurar o sourceSets do test e androidTest para visualizar o sheredTest.

Para isso primeiramente vamos criar o novo pacote de testes: src/sharedTest/java/{pakage_do_projeto}
Obs: Importante criar o package do projeto para assimilar com os outros testes.

Agora basta configurar o build.gradle da seguinte maneira: Continue reading

Android – Accessing hidden method Ljava/lang/Thread – Coroutines do not log uncaught exceptions in Android

kotlin_android_ktVerificar Issue: https://github.com/Kotlin/kotlinx.coroutines/issues/148#issuecomment-338101986

Solução que utilizei:

val handler = CoroutineExceptionHandler { _, ex ->
  ex.printStackTrace() //TODO
}
launch(CommonPool + handler) {
   //your code here
}

Android – Configurando o Dagger com Worker (Dagger 2 setup with WorkManager)

dagger-dependency-injection

No exemplo a seguir mostro como configurar o Dagger 2 para trabalhar com o WorkManager.
Atualmente é uma tarefa bem complicada e que possivelmente sofrerá alterações em sua implementação pois o WorkManager é uma nova API do Android e o Dagger2 ainda não tem recursos para facilitar a implementação de injeção de dependências nela.

Este artigo está utilizando as seguintes versões:

dagger2: “com.google.dagger:dagger-android:2.20″
workmanager: “android.arch.work:work-runtime-ktx:1.0.0-beta04″

Veja a implementação: Continue reading

Kotlin – Dicas de como utilizar as Standard Funcions – ‘run’, ‘let’, ‘apply’ and ‘also’ (Kotlin Standard Functions cheat-sheet)

kotlin_android_kt

Todas essas funções funcionam de maneira semelhante, no sentido em que permitem alterar o escopo da função ou variável atual e, ao mesmo tempo, aplicar várias operações nessa mesma variável, tudo no mesmo lugar. Segue um flowchart bem interessante que encontrei em uma publicação no Medium/androiddevelopers para auxiliar na escolha: Continue reading