Upgrade para Java8 e Maven3 e IntelliJ 2021.3 em todos os projetos

2 views
Skip to first unread message

Pedro Viegas

unread,
Dec 9, 2021, 12:42:58 PM12/9/21
to DIF2 Mailing list
Boa tarde,

Para conseguir o objetivo descrevo os passos necessários:

1. Instalação do Maven
É necessário instalar o Maven 3.8.4 (último à data corrente) e manter o Maven 2.2.1 já instalado para aplicações antigas.
No ficheiro do maven deverá ser adicionado o Java correto na variável JAVA_HOME.
Ficheiros:
  • MAVEN_HOME/bin/mvn.bat
  • MAVEN_HOME/bin/mvn
Versões compatíveis Java:
  • Maven 3.8.4: Java 8
  • Maven 2.2.1: Java 7
#!/bin/sh
(...)
# -----------------------------------------------------------------------------
# Apache Maven Startup Script
#
# Environment Variable Prerequisites
#
# JAVA_HOME Must point at your Java Development Kit installation.
# MAVEN_OPTS (Optional) Java runtime options used when Maven is executed.
# MAVEN_SKIP_RC (Optional) Flag to disable loading of mavenrc files.
# -----------------------------------------------------------------------------

JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/

if [ -z "$MAVEN_SKIP_RC" ] ; then
(...)

2. Maven settings.xml
O Maven 3.8.x deixou de suportar repositórios Maven http. Apenas https.
O nosso e o do Maven antigo que ainda precisamos é http, logo é necessário adicionar as seguintes linhas ao nosso settings.xml

<settings>
<!--localRepository>T:\Cache\MavenRepository\</localRepository-->
<!--localRepository>C:\MavenRepository\</localRepository-->
<mirrors>
<settings>
<!--localRepository>T:\Cache\MavenRepository\</localRepository-->
<!--localRepository>C:\MavenRepository\</localRepository-->
<mirrors>
<!-- MAVEN 2 -->
<!-- <mirror>
<id>central.mirror</id>
<url>https://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
-->
<!-- MAVEN 3 -->
<mirror>
<id>repo.mirror</id>
<name>My Repo HTTP Mirror</name>
<url>http://development.digitalis.pt:8081/artifactory/repo</url>
<mirrorOf>repo</mirrorOf>
<blocked>false</blocked>
</mirror>
<mirror>
<id>java.net.mirror</id>
<name>My Repo HTTP Mirror</name>
<url>http://download.java.net/maven/2/</url>
<mirrorOf>maven2-repository.dev.java.net</mirrorOf>
<blocked>false</blocked>
</mirror>
</mirrors>

<servers>
<server>
<id>development</id>
<username>root</username>
</server>
<server>
<id>repo</id>
<username>pviegas</username>
<password>******</password>
</server>
<server>
<id>repo.mirror</id>
<username>pviegas</username>
<password>*******</password>
</server>
<server>
<id>mycentral</id>
<username>pviegas</username>
<password>*******</password>
</server>
</servers>(...)
Basicamente definimos dois mirrors para ambos os repositórios e indicamos o novo parâmetro blocked=false.
Note-se a referência ao mirror nos servers onde indicamos os parâmetros de autenticação.

NOTA:
Infelizmente este novo parâmetro blocked não é reconhecido pelo Maven 2 pelo quando necessitarmos de fazer builds com o maven 2 é necessário comentar as linhas "<blocked>false</blocked>".


3. Projetos
Todos os projetos ativos no Git foram compatibilizados com estas novas versões no Branch Development.
Um branch específico para as mesmas foi criado para conter as alterações em causa (Maven3_Java8_Adoption).
Foi criado um novo DigitalisSuperPom versão 2.0.0 para trazer as novas dependências (inclusivé a versão de compilação do maven compiler) para os novos projetos.

As versões compatíveis com esta nova plataforma são:
  • DIF 2.8.4
  • SigesSrv 20.0.11
  • MOBILIDADEnet 1.2.7
  • GerEventos 1.4.0

4. Builds paralelos
O Maven 3 touxe uma feature muito importe, builds paralelos:

Por omissão o build é sequencial. Mas se passarem ao Maven o parâmetro "mvn .... -T 4" o build é feito em 4 threads paralelas.
O ganho é de 20 a 50% de tempo!!! USEM!!!

5. IntelliJ 2021.3
Esta versão do IntelliJ trás o Maven 3.8.x e quebrou a compatibilidade com o anterior.
É pois por isso obrigatório os passos anteriores para o novo IntelliJ.

Mantenham o IntelliJ anterior para as versões anteriores dos projetos.

Alterações necessárias no IntelliJ nos vários projetos:
  1. IntelliJ Settings
    1. Build -> Build tools -> Maven -> Thread count: 4
    2. Build -> Build tools -> Maven -> Maven: Bundled (3.8.x)
    3. Build -> Build tools -> Maven -> Importing -> JDK for importer: JDK 1.8
    4. Build -> Build tools -> Maven -> Runner -> JRE: JDK 1.8
image.png
 image.png image.png

6. Compatibilidade com versões anteriores dos projetos
Infelizmente não é possível uma configuração para projetos anteriores às versões indicadas e estas.
Este passo obrigará a ter configurações diferentes entre versões até termos versões de produção de tudo com estas versões.

Passos necessários para poder fazer build/desenvolver com as versões novas e antigas:
  • Versões novas (maven 3)
    • Script em linha de comando para definir o maven em contexto
    • Descomentar as linhas blocked do settings
  • Versões novas (maven 2)
    Script em linha de comando para definir o maven em contexto
    Comentar as linhas blocked do settings
Relativamente ao intelliJ, o ideal será ter dois projetos, o das novas com estas confugurações (Maven 3 e Java8) e outro para o anterior com o (Maven 2 e Java7).

Deixo os meus scripts de linha de comando para mudar entre ambientes para referência.

Maven 2 (mvn2.sh)
#!/bin/bash
export M2_HOME=~/Development/apache-maven-2.2.1
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

#alias c='mvn clean -o -Dmaven.test.skip'
alias b='mvn install -o -Dmaven.test.skip'
alias be='mvn install -Pexploded -o -Dmaven.test.skip'
alias bf='mvn install -Pfinal -o -Dmaven.test.skip'
alias cb='mvn clean install -o -Dmaven.test.skip'
alias cbd='mvn clean install deploy -Dmaven.test.skip'
alias cbe='mvn clean install -Pexploded -o -Dmaven.test.skip'
alias cbf='mvn clean install -Pfinal -o -Dmaven.test.skip'
alias cbfd='mvn clean install deploy -Pfinal -Dmaven.test.skip'

#mvn "$@"

Maven 3 (mvn3.sh)
#!/bin/bash
export M3_HOME=~/Development/apache-maven-3.8.4
export M3=$M3_HOME/bin
export PATH=$M3:$PATH

#alias c='mvn clean -o -Dmaven.test.skip'
alias b='mvn install -o -Dmaven.test.skip -T 4'
alias be='mvn install -Pexploded -o -Dmaven.test.skip -T 4'
alias bf='mvn install -Pfinal -o -Dmaven.test.skip -T 4'
alias cb='mvn clean install -o -Dmaven.test.skip -T 4'
alias cbd='mvn clean install deploy -Dmaven.test.skip -T 4'
alias cbe='mvn clean install -Pexploded -o -Dmaven.test.skip -T 4'
alias cbf='mvn clean install -Pfinal -o -Dmaven.test.skip -T 4'
alias cbfd='mvn clean install deploy -Pfinal -Dmaven.test.skip -T 4'

#mvn "$@"

Não adicionei mas uma boa ideia seria ter um settings.xml para o Maven 2 e outro para o Maven 3 e o script de mudar o ambiente copiava o correto para o settings.xml.
Fica a ideia.

Obrigado.

Com os melhores cumprimentos,



Pedro Viegas
Director Departamento de Desenvolvimento
(Development Manager)
Digitalis Informática Lda
R&D: http://development.digitalis.pt


Luis Pinto

unread,
Dec 16, 2021, 5:06:47 AM12/16/21
to dif2
Bom dia

Solução para que necessita de utilizar o mvn2 e mvn3.

Para evitar ter de alterar/trocar o .m2/settings.xml devido ao "parâmetro blocked não é reconhecido pelo Maven 2"
  • o .m2/settings.xml deixei configurado para o mvn3
  • criei um ficheiro settings_m2.xml para o mvn2
  • Utilizei a configuração de mvn "-s,--settings <arg>  Alternate path for the user settings file"  para utilizar o settings_m2.xml. 
    • Forcei a configuração no ficheiro «maven2»/bin/mvn. No ficheiro:
      • Criei var MAVEN_SETTINGS_ARG="-s ~/.m2/settings_m2.xml"
      • Adicionei a var à linha "exec $JAVACMD" \   $MAVEN_OPTS \   -classpath "${M2_HOME}"/boot/classworlds-*.jar \   "-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \   "-Dmaven.home=${M2_HOME}"  \   ${CLASSWORLDS_LAUNCHER} $QUOTED_ARGS $MAVEN_SETTINGS_ARG

Para trocar o executável de mvn, Em linux utilizei update-alternatives:
  • Instalação das versões de mvn
    • sudo update-alternatives --install /usr/bin/mvn mvn /home/lpinto/stuff/Software/apache-maven-2.2.1/bin/mvn 100
    • sudo update-alternatives --install /usr/bin/mvn mvn /home/lpinto/stuff/Software/apache-maven-3.8.4/bin/mvn 200
  • Utilização 
    • sudo update-alternatives --config mvn

Fica a sugestão.

Com os melhores cumprimentos,

Luis Pinto
Team Leader Web
Departamento de Desenvolvimento




--
--
You received this message because you are subscribed to the Google
Groups "DIF2 Group" group.
To post to this group, send email to di...@googlegroups.com
To unsubscribe from this group, send email to
dif2+uns...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/dif2?hl=en
 
See the documentation page for the DIF2 project:
http://development.digitalis.pt/apache2-default/staging/

---
You received this message because you are subscribed to the Google Groups "DIF2 Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dif2+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dif2/CACWpS827vYP5ERC5Xf86t7F0NwiXonqG0dDWtrF%3Daf02C63ryA%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages