viernes, 29 de diciembre de 2017

Java 9 con Eclipse: Morir en el intento!

1. Instalar Java 9

Me decanté a probar Java porqué quería hacer una bitácora (log) donde saliera la traza de los programas que llaman a un último método de la clase y en caso de error saber que había pasado.

Tras leer en Stack Overflow la manera de recuperar toda la traza de clases y metodos encadenados que apuntan a un método concreto, me recomiendan utilizar StackWalking API de Java 9 por un tema de rendimiento.

Me pongo a instalar java 9 en Ubuntu tal y como dice Shahrukh Aslam siguiendo sus pasos:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#download repository
sudo add-apt-repository ppa:webupd8team/java

#update reposotory
sudo apt-get update

#install
sudo apt install oracle-java9-installer

#make this java version default
sudo apt install oracle-java9-set-default

pero cuando hago java -version me llevo la sorpresa de que todavía se apunta a Java 1.8

Para ello recurro a la respuesta de SkyWalker de Stack Overflow.

OJO: Hay que tomar estas precauciones:

1. Crear un usuario nuevo por si os equivocais al manipular las variables de entorno y no se cargan, poder acceder al sistema mediante este usuario.

2. Cambiar solo el .bashrc    Para ello indicar


export JAVA_HOME=/usr/lib/jvm/java-9-oracle
export PATH=$JAVA_HOME/bin:$PATH

3. No tocar el etc/enviroment



Por desgracia toqué el etc/environment y cuando hacía login al sistema no entraba. Creia que se había cargado el teclado inglés pero no aparecía ninguna indicación. Tuve que entrar en ALT-F1 en una tty a modo caracter donde no reconocía ningun path y tuve que teclear 

/usr/bin/vi /etc/environment

Dejar el fichero tal como estaba antes y guardar con Mayuscula zz

Y pude entrar de nuevo al sistema

UFFFFFFF que alivio.

2. Que pasa con Eclipse?


Parece ser que las versiones ya instaladas de Eclipse no funcionan o funcionana a medias según de donde se las llama.

Para que funcionen las versiones antiguas hay que apuntar a la JDK de versión anterior.

Parece ser que la nueva versión de Eclipse Oxygen v2, si que funciona... pero...

1. Hay que instalar previamente el JDK 9 antes que el Eclipse.

2. Como se te ocurra ejecutar eclipse antes de instalar java 9 estás perdido. Si lo jaces hay que borrar el directorio donde has descomprimido el jar y volverlo a crear mediante la descompresión del jar (de eclipse), una vez ya haya sido instalado el jdk 9.

3. En el caso anterior, el error que salía decía "an error has occurred. See log null" o algo parecido.

4. Boton drecho sobre el proyecto -> Propiedades->Project facets y Java Compiler->Verificar que haga referencia a java 9

5. JDK 9 no muestra las librerias que pueden podrían pertenecer a JEE :
  - java.xml.ws ( SAAj, Web Services Metadata) ,
  - java.xml.bind (jAXB), java.activation (jAF),
  - java.xml.ws.annotation (Common Annotations),
  - java.corba (CORBA),
  - java.transaction (jTA),
  - java.se.ee (aggregator module for last 6 modoules),
  - jdk.xml.ws (Tools for jAX-WS, wsgen, wsimport),
  - jdk.xml.bind (Tools for jAXB, schemagen, xjc),
  - java.corba (idlj, orbd, servertoo, tnamesrv).

Por ello se habla de las siguientes RIs o implementaciónes de referencia que se encuentran en Maven:

    - com.sun.xml.ws: jaxws-ri (para jAX-WS. SAAj y Web Services Metadata) que en Maven es:
    - com.sun.xml.bind : jax-ri (JAXB)
    - javax.transaction : javax.transaction-api

Que en definitiva se pueden indicar en el pom.xml como:
    
    <properties>
       <jax.version>2.3.0</jax.version>
    </properties>

    <dependency>
      <groupId>com.sun.xml.ws</groupId>
      <artifactId>jaxws-ri</artifactId>
      <version>${jax.version}</version>
      <type>pom</type>
    </dependency>
    
    <dependency>
      <groupId>com.sun.xml.bind</groupId>
      <artifactId>jaxb-ri</artifactId>
      <version>${jax.version}</version>
      <type>pom</type>
    </dependency>
    
    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>javax.transaction-api</artifactId>
      <version>1.2</version>
    </dependency>
    
     <dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.2</version>
    </dependency>


Hemos puesto la versión 2.3.0 en propiedades para que la cosa quede mas bonita.

Pero ....

1. Hay que tener en cuenta que estas referencias apuntan a

http://repo1.maven.org/maven2

Pero no hace falta añadirlo, ya que tambien están en el repositorio de Maven que apunta eclipse.

Si se quiesiera añadir este repositori se podría también añadir . Para ello se puede ver lo que se dice en StackOverflow y darle esta entrada al pom.xml anadada en <project>

  <repositories>
    <repository>
        <id>maven-central-repo1</id>
        <name>Maven Centra Repo1 Repository</name>
        <url>http://repo1.maven.org/maven2</url>
    </repository>

  </repositories>

2. Observar  <type>pom</type>, en su ausencia NO encuentra la dependencia !!!


3. Lombok no me funciona..

He bajado la version "cutting-edge" v1.16.19 "Edgy Guinea Pig". He ejecutado:

sudo java -jar lombok-edge.jar 

y lo he reinnstalado al Eclipse Oxygen 2. Y ... parece ser que ya lo coge!


4. Apache CXF no funciona...

De momento no tengo solución para esto. Tendré que volver a la java 1.8

Para ello la cambio con

sudo update-alternatives --config java

No hay comentarios :

Publicar un comentario