Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-08-29 Thread 'Luigi R. Viggiano' luigi.viggi...@gmail.com [it-torino-java-jug]
On Thu, Aug 29, 2019 at 6:54 PM Luigi R. Viggiano 
wrote:

>
>
>>
>> "$@:2"? Perché non "$2"?
>>
>
> non lo so, sono cotto, dovrei mettermi a debuggare. Ma di sicuro c'è un
> buon motivo.
>
> skippa il primo parametro

https://unix.stackexchange.com/questions/92978/what-does-this-2-mean-in-shell-scripting


JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines"

JVM_SUFFIX_PATH="/Contents/Home"


_latest() {

local WHERE="$1"

find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" | sort
-r | head -1

}


_readlink() {

if [[ -L $1 ]]; then

stat -f "%Y" "$1"

else

stat -f "%N" "$1"

fi

}


# environment settings

JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)"

Se $REQ_VERSION è jdk1.8 va a cercarsi la versione più recente di jdk1.8
nella directory /Library/Java/JavaVirtualMachines o  qualcosa del genere.

$ ls -l /Library/Java/JavaVirtualMachines

total 0

drwxr-xr-x  3 root  wheel  96 Jul 14  2015 1.6.0.jdk/

drwxr-xr-x  3 root  wheel  96 Jan  3  2019 jdk-11.0.1.jdk/

drwxr-xr-x  3 root  wheel  96 Nov 13  2018 jdk1.7.0_80.jdk/

drwxr-xr-x  3 root  wheel  96 Oct 17  2017 jdk1.8.0_144.jdk/

se ci fosse jdk1.8.1 pescherebbe quest'ultima.

Ciao.
--Luigi


Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-08-29 Thread 'Luigi R. Viggiano' luigi.viggi...@gmail.com [it-torino-java-jug]
>
>
> "$@:2"? Perché non "$2"?
>

non lo so, sono cotto, dovrei mettermi a debuggare. Ma di sicuro c'è un
buon motivo.

Ciao.
L.


Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-08-29 Thread Paolo Mossino paolo.moss...@gmail.com [it-torino-java-jug]
"$@:2"? Perché non "$2"?


On Thu, Aug 29, 2019 at 5:06 PM 'Luigi R. Viggiano' luigi.viggi...@gmail.com
[it-torino-java-jug]  wrote:

>
>
> Ho provato con a sostituire $* con $@ e non va.
>
> $ cat __java
>
> REQ_VERSION="$1"
>
> shift
>
> JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines"
>
> JVM_SUFFIX_PATH="/Contents/Home"
>
>
> _latest() {
>
> local WHERE="$1"
>
> find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" |
> sort -r | head -1
>
> }
>
>
> _readlink() {
>
> if [[ -L $1 ]]; then
>
> stat -f "%Y" "$1"
>
> else
>
> stat -f "%N" "$1"
>
> fi
>
> }
>
>
> # environment settings
>
> JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)"
>
> if [[ -n "$JDK_PATH" ]]; then
>
> export JAVA_HOME="$JDK_PATH$JVM_SUFFIX_PATH"
>
> export PATH=$JAVA_HOME/bin:$PATH
>
> export MANPATH=$JAVA_HOME/man:$MANPATH
>
> else
>
> echo JDK matching version \"$REQ_VERSION\" cannot be found. >&2
>
> exit 1
>
> fi
>
>
> unset -f _latest _readlink
>
>
> if [[ -n "$VERBOSE" ]]; then
>
> echo JAVA_HOME=$JAVA_HOME
>
> echo
>
> java -version
>
> echo
>
> fi
>
>
> # execute the command line
>
> if [ -n "${@}" ]; then
>
> ${@}
>
> fi
>
>
> $ java8 ls -la
>
> /Users/work/var/src/dotfiles/bin/__java: line 40: [: ls: binary operator
> expected
>
>
> $ cat __java
>
> REQ_VERSION="$1"
>
> shift
>
> JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines"
>
> JVM_SUFFIX_PATH="/Contents/Home"
>
>
> _latest() {
>
> local WHERE="$1"
>
> find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" |
> sort -r | head -1
>
> }
>
>
> _readlink() {
>
> if [[ -L $1 ]]; then
>
> stat -f "%Y" "$1"
>
> else
>
> stat -f "%N" "$1"
>
> fi
>
> }
>
>
> # environment settings
>
> JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)"
>
> if [[ -n "$JDK_PATH" ]]; then
>
> export JAVA_HOME="$JDK_PATH$JVM_SUFFIX_PATH"
>
> export PATH=$JAVA_HOME/bin:$PATH
>
> export MANPATH=$JAVA_HOME/man:$MANPATH
>
> else
>
> echo JDK matching version \"$REQ_VERSION\" cannot be found. >&2
>
> exit 1
>
> fi
>
>
> unset -f _latest _readlink
>
>
> if [[ -n "$VERBOSE" ]]; then
>
> echo JAVA_HOME=$JAVA_HOME
>
> echo
>
> java -version
>
> echo
>
> fi
>
>
> # execute the command line
>
> if [ -n "${*}" ]; then
>
> ${*}
>
> fi
>
>
> $ java8 ls -la
>
> total 264
>
> drwxr-xr-x  35 lvig0001  admin  1120 Aug 29 17:02 .
>
> drwxr-xr-x  10 lvig0001  admin   320 Feb  6  2019 ..
>
> -rw-r--r--   1 lvig0001  admin   870 Aug 29 17:02 __java
>
> -rw-r--r--   1 lvig0001  admin   865 Nov  6  2018 __ssh_server_functions
>
> -rwxr-xr-x   1 lvig0001  admin   103 Nov  6  2018 airport
>
> -rwxr-xr-x   1 lvig0001  admin82 Nov  6  2018 backup-music
>
>
>
>
> Da notare che nella funzione _latest() ho usato ${@:2}.
>
> Probabilmente è uno di quei casi dove bisogna usare ${*}
>
> Adesso non mi ricordo perché è così, ma probabile che ci sono inciampato
> già su questa cosa.
>
> Per cui non è un bug, è una feature ;)
>
> Ciao
> --Luigi
>
>
>
> On Thu, Aug 29, 2019 at 4:51 PM Luigi R. Viggiano <
> luigi.viggi...@gmail.com> wrote:
>
>> Effettivamente è un bug. Ma non essendomene mai accorto ;)
>>
>> Ci sono una serie di quirk di bash di cui sono al corrente (tipo la
>> differenza tra "[" e "[[") o gli apici singoli e doppi, e anche $* e $@.
>> Prendo nota come best practice di usare "$@".
>>
>> Lo correggo quando arrivo a casa. ;)
>>
>> Grazie.
>> --Luigi
>>
>>
>>
>> On Wed, May 8, 2019 at 10:59 PM Paolo Mossino paolo.moss...@gmail.com
>>  [it-torino-java-jug] <
>> it-torino-java-jug@yahoogroups.com> wrote:
>>
>>>
>>>
>>> Concorderei, MA:
>>>
>>>- stiamo parlando di un dotfiles, quindi mi aspetto sia l'autore a
>>>considerare e decidere cosa farci, visto che è teoricamente a suo uso e
>>>consumo semi-esclusivo ;-)
>>>- è possibile che A) funzioni per via compensazioni altrove (tipo
>>>doppio bug che si annullano a vicenda) o B) l'autore faccia leva su 
>>> questo
>>>comportamento per fare magie, quindi risolverlo potrebbe impattare
>>>dipendenze esterne di cui non sono a conoscenza
>>>
>>> Parliamo di Java, ecco un esempio di magie che funzionicchiano
>>> sfruttando il fatto che *NON* hai quotato correttamente le variabili (e
>>> quindi chiedi alla bash di fare un parsing al volo):
>>>
>>> OPTS="-Dfoo=bar -Daaa=bbb"
>>> java ${OPTS} "$@"
>>>
>>>
>>> La versione corretto richiede di usare un array bash (se la version di
>>> Bash lo supporta):
>>>
>>> declare -a OPTS=(
>>> '-DDfoo=bar'
>>> '-Daaa=bbb'
>>> )
>>>
>>> java "${OPTS[@]}" "$@"
>>>
>>>
>>> . ma questo non funziona bene se OPTS veniva dall'environment (che
>>> AFAICR non supporta gli array, solo stringhe) anziché da un file
>>> sourced.
>>>
>>> Un *buon* esempio di come fare uno startup di un programma Java
>>> correttamente l'ho trovato in jetty.sh... good job! ;-)
>>>
>>>
>>>
>>> On Wed, May 8, 2019 at 3:38 PM Roberto 

Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-08-29 Thread 'Luigi R. Viggiano' luigi.viggi...@gmail.com [it-torino-java-jug]
Ho provato con a sostituire $* con $@ e non va.

$ cat __java

REQ_VERSION="$1"

shift

JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines"

JVM_SUFFIX_PATH="/Contents/Home"


_latest() {

local WHERE="$1"

find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" | sort
-r | head -1

}


_readlink() {

if [[ -L $1 ]]; then

stat -f "%Y" "$1"

else

stat -f "%N" "$1"

fi

}


# environment settings

JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)"

if [[ -n "$JDK_PATH" ]]; then

export JAVA_HOME="$JDK_PATH$JVM_SUFFIX_PATH"

export PATH=$JAVA_HOME/bin:$PATH

export MANPATH=$JAVA_HOME/man:$MANPATH

else

echo JDK matching version \"$REQ_VERSION\" cannot be found. >&2

exit 1

fi


unset -f _latest _readlink


if [[ -n "$VERBOSE" ]]; then

echo JAVA_HOME=$JAVA_HOME

echo

java -version

echo

fi


# execute the command line

if [ -n "${@}" ]; then

${@}

fi


$ java8 ls -la

/Users/work/var/src/dotfiles/bin/__java: line 40: [: ls: binary operator
expected


$ cat __java

REQ_VERSION="$1"

shift

JVM_PREFIX_PATH="/Library/Java/JavaVirtualMachines"

JVM_SUFFIX_PATH="/Contents/Home"


_latest() {

local WHERE="$1"

find "${WHERE}" -maxdepth 1 -type d 2> /dev/null | grep "${@:2}" | sort
-r | head -1

}


_readlink() {

if [[ -L $1 ]]; then

stat -f "%Y" "$1"

else

stat -f "%N" "$1"

fi

}


# environment settings

JDK_PATH="$(_latest `_readlink $JVM_PREFIX_PATH` $REQ_VERSION)"

if [[ -n "$JDK_PATH" ]]; then

export JAVA_HOME="$JDK_PATH$JVM_SUFFIX_PATH"

export PATH=$JAVA_HOME/bin:$PATH

export MANPATH=$JAVA_HOME/man:$MANPATH

else

echo JDK matching version \"$REQ_VERSION\" cannot be found. >&2

exit 1

fi


unset -f _latest _readlink


if [[ -n "$VERBOSE" ]]; then

echo JAVA_HOME=$JAVA_HOME

echo

java -version

echo

fi


# execute the command line

if [ -n "${*}" ]; then

${*}

fi


$ java8 ls -la

total 264

drwxr-xr-x  35 lvig0001  admin  1120 Aug 29 17:02 .

drwxr-xr-x  10 lvig0001  admin   320 Feb  6  2019 ..

-rw-r--r--   1 lvig0001  admin   870 Aug 29 17:02 __java

-rw-r--r--   1 lvig0001  admin   865 Nov  6  2018 __ssh_server_functions

-rwxr-xr-x   1 lvig0001  admin   103 Nov  6  2018 airport

-rwxr-xr-x   1 lvig0001  admin82 Nov  6  2018 backup-music




Da notare che nella funzione _latest() ho usato ${@:2}.

Probabilmente è uno di quei casi dove bisogna usare ${*}

Adesso non mi ricordo perché è così, ma probabile che ci sono inciampato
già su questa cosa.

Per cui non è un bug, è una feature ;)

Ciao
--Luigi



On Thu, Aug 29, 2019 at 4:51 PM Luigi R. Viggiano 
wrote:

> Effettivamente è un bug. Ma non essendomene mai accorto ;)
>
> Ci sono una serie di quirk di bash di cui sono al corrente (tipo la
> differenza tra "[" e "[[") o gli apici singoli e doppi, e anche $* e $@.
> Prendo nota come best practice di usare "$@".
>
> Lo correggo quando arrivo a casa. ;)
>
> Grazie.
> --Luigi
>
>
>
> On Wed, May 8, 2019 at 10:59 PM Paolo Mossino paolo.moss...@gmail.com
> [it-torino-java-jug]  wrote:
>
>>
>>
>> Concorderei, MA:
>>
>>- stiamo parlando di un dotfiles, quindi mi aspetto sia l'autore a
>>considerare e decidere cosa farci, visto che è teoricamente a suo uso e
>>consumo semi-esclusivo ;-)
>>- è possibile che A) funzioni per via compensazioni altrove (tipo
>>doppio bug che si annullano a vicenda) o B) l'autore faccia leva su questo
>>comportamento per fare magie, quindi risolverlo potrebbe impattare
>>dipendenze esterne di cui non sono a conoscenza
>>
>> Parliamo di Java, ecco un esempio di magie che funzionicchiano sfruttando
>> il fatto che *NON* hai quotato correttamente le variabili (e quindi
>> chiedi alla bash di fare un parsing al volo):
>>
>> OPTS="-Dfoo=bar -Daaa=bbb"
>> java ${OPTS} "$@"
>>
>>
>> La versione corretto richiede di usare un array bash (se la version di
>> Bash lo supporta):
>>
>> declare -a OPTS=(
>> '-DDfoo=bar'
>> '-Daaa=bbb'
>> )
>>
>> java "${OPTS[@]}" "$@"
>>
>>
>>  ma questo non funziona bene se OPTS veniva dall'environment (che
>> AFAICR non supporta gli array, solo stringhe) anziché da un file sourced.
>>
>> Un *buon* esempio di come fare uno startup di un programma Java
>> correttamente l'ho trovato in jetty.sh... good job! ;-)
>>
>>
>>
>> On Wed, May 8, 2019 at 3:38 PM Roberto Franchini ro.franch...@gmail.com
>> [it-torino-java-jug]  wrote:
>>
>>>
>>>
>>>
>>>
>>> On Wed, May 8, 2019 at 3:33 PM Paolo Mossino paolo.moss...@gmail.com
>>> [it-torino-java-jug]  wrote:
>>>


  [cut]
>>>
>>>
>>>
 L'errore appare nei vari wrapper, tipo

- https://github.com/lviggiano/dotfiles/blob/master/bin/java10#L2
- https://github.com/lviggiano/dotfiles/blob/master/bin/__java#L41



>>> PR subito!
>>> That's the way!
>>>
>>> FRANK
>>> --
>>> Roberto Franchini
>>> "The impossible is inevitable"
>>> 

Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-08-29 Thread 'Luigi R. Viggiano' luigi.viggi...@gmail.com [it-torino-java-jug]
Effettivamente è un bug. Ma non essendomene mai accorto ;)

Ci sono una serie di quirk di bash di cui sono al corrente (tipo la
differenza tra "[" e "[[") o gli apici singoli e doppi, e anche $* e $@.
Prendo nota come best practice di usare "$@".

Lo correggo quando arrivo a casa. ;)

Grazie.
--Luigi



On Wed, May 8, 2019 at 10:59 PM Paolo Mossino paolo.moss...@gmail.com
[it-torino-java-jug]  wrote:

>
>
> Concorderei, MA:
>
>- stiamo parlando di un dotfiles, quindi mi aspetto sia l'autore a
>considerare e decidere cosa farci, visto che è teoricamente a suo uso e
>consumo semi-esclusivo ;-)
>- è possibile che A) funzioni per via compensazioni altrove (tipo
>doppio bug che si annullano a vicenda) o B) l'autore faccia leva su questo
>comportamento per fare magie, quindi risolverlo potrebbe impattare
>dipendenze esterne di cui non sono a conoscenza
>
> Parliamo di Java, ecco un esempio di magie che funzionicchiano sfruttando
> il fatto che *NON* hai quotato correttamente le variabili (e quindi
> chiedi alla bash di fare un parsing al volo):
>
> OPTS="-Dfoo=bar -Daaa=bbb"
> java ${OPTS} "$@"
>
>
> La versione corretto richiede di usare un array bash (se la version di
> Bash lo supporta):
>
> declare -a OPTS=(
> '-DDfoo=bar'
> '-Daaa=bbb'
> )
>
> java "${OPTS[@]}" "$@"
>
>
>  ma questo non funziona bene se OPTS veniva dall'environment (che
> AFAICR non supporta gli array, solo stringhe) anziché da un file sourced.
>
> Un *buon* esempio di come fare uno startup di un programma Java
> correttamente l'ho trovato in jetty.sh... good job! ;-)
>
>
>
> On Wed, May 8, 2019 at 3:38 PM Roberto Franchini ro.franch...@gmail.com
> [it-torino-java-jug]  wrote:
>
>>
>>
>>
>>
>> On Wed, May 8, 2019 at 3:33 PM Paolo Mossino paolo.moss...@gmail.com
>> [it-torino-java-jug]  wrote:
>>
>>>
>>>
>>>  [cut]
>>
>>
>>
>>> L'errore appare nei vari wrapper, tipo
>>>
>>>- https://github.com/lviggiano/dotfiles/blob/master/bin/java10#L2
>>>- https://github.com/lviggiano/dotfiles/blob/master/bin/__java#L41
>>>
>>>
>>>
>> PR subito!
>> That's the way!
>>
>> FRANK
>> --
>> Roberto Franchini
>> "The impossible is inevitable"
>> https://github.com/robfrank/
>> https://twitter.com/robfrankie
>> https://www.linkedin.com/in/robfrank
>>
>>
>
> --
> Paolo Mossino  
>
> 
>


Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-05-08 Thread Paolo Mossino paolo.moss...@gmail.com [it-torino-java-jug]
Attenzione: generalmente non dovresti *MAI* usare $* in uno script bash,
sempre "$@" (quindi dentro un double quote E "@" al posto di "*"),
altrimenti si mangia gli spazi.
Ci sono eccezioni, ma sono appunto eccezioni, quasi mai la norma quando
parli di command line. Ecco una spiegazione, un po' più completa della mia:

https://google.github.io/styleguide/shell.xml#Quoting


L'errore appare nei vari wrapper, tipo

   - https://github.com/lviggiano/dotfiles/blob/master/bin/java10#L2
   - https://github.com/lviggiano/dotfiles/blob/master/bin/__java#L41


Si, molti degli script ti startup di vari prodotti Java lo fanno e
sbagliano.

Ecco un esempio banale di cosa succede altrimenti (in rosso l'errore, in
verde come dovrebbe essere):

*$ cat 2.sh*
echo "### With \$*"
echo $*
echo "### With \"\$@\""
echo "$@"

*$ bash 2.sh 1 2 3*
### With $*
1 2 3
### With "$@"
1 2 3

*$ bash 2.sh 1 'with spaces'*
### With $*
1 with spaces
### With "$@"
1 with spaces

*$ bash 2.sh 1 'withmore   spaces'*
### With $*
1 with more spaces
### With "$@"
1 withmore   spaces


Come vedi, gli spazi vengono mangiati se non usi il quoting E ti serve

Si, ho barato leggermente nel non considerare "$*", ma comunque "$@", per
una command line da eseguire, è quello che ti serviva.


On Wed, May 8, 2019 at 2:09 PM 'Luigi R. Viggiano' luigi.viggi...@gmail.com
[it-torino-java-jug]  wrote:

>
>
> I uso dei wrapper script:
>
> $ java7 ant clean dist
>
> $ java8 mvn clean install
>
> i sorgenti di questi wrapper script sono qui:
> https://github.com/lviggiano/dotfiles/tree/master/bin
>
> Ciao.
>
> --Luigi
>
>
>
> On Thu, Apr 4, 2019 at 8:49 AM Alex gandalf902...@yahoo.com
> [it-torino-java-jug]  wrote:
>
>>
>>
>> Ciao,
>> spero sia utile ;-)
>>
>> Buoan giornata
>>
>> How to Install Multiple Versions of Java on the Same Machine - DZone Java
>> 
>>
>> How to Install Multiple Versions of Java on the Same Machine - DZone Java
>>
>> In this post, we look at a common problem facing Java developers: how to
>> install multiple versions of the JDK on...
>>
>> 
>>
>>
>> 
>


-- 
Paolo Mossino  


Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-05-08 Thread 'Luigi R. Viggiano' luigi.viggi...@gmail.com [it-torino-java-jug]
I uso dei wrapper script:

$ java7 ant clean dist

$ java8 mvn clean install

i sorgenti di questi wrapper script sono qui:
https://github.com/lviggiano/dotfiles/tree/master/bin

Ciao.

--Luigi



On Thu, Apr 4, 2019 at 8:49 AM Alex gandalf902...@yahoo.com
[it-torino-java-jug]  wrote:

>
>
> Ciao,
> spero sia utile ;-)
>
> Buoan giornata
>
> How to Install Multiple Versions of Java on the Same Machine - DZone Java
> 
>
> How to Install Multiple Versions of Java on the Same Machine - DZone Java
>
> In this post, we look at a common problem facing Java developers: how to
> install multiple versions of the JDK on...
>
> 
>
>
> 
>


Re: [Jug-Torino] Versioni multiple java sulla stessa macchina

2019-04-04 Thread Roberto Franchini ro.franch...@gmail.com [it-torino-java-jug]
On Thu, Apr 4, 2019 at 8:49 AM Alex gandalf902...@yahoo.com
[it-torino-java-jug]  wrote:

>
>
> Ciao,
> spero sia utile ;-)
>
> Buoan giornata
>
>
>
[cut]
Ciao,
personalmente su Mac ho scartato SDKMan in favore di brew e jenv (
http://www.jenv.be/)

Quando ero dal lato giusto della forza, su linux, apt-alternatives era il
mio migliore amico, ed ancora oggi mi manca molto.

FRANK
-- 
Roberto Franchini
"The impossible is inevitable"
https://github.com/robfrank/
https://twitter.com/robfrankie
https://www.linkedin.com/in/robfrank