Mostrando entradas con la etiqueta eclipse. Mostrar todas las entradas
Mostrando entradas con la etiqueta eclipse. Mostrar todas las entradas

domingo, 6 de marzo de 2022

Algunos plugins útiles para Eclipse

 1. EGradle (Editor) 

Es un editor de ficheros de gradle

Detecta algunos errores de sintaxis. Puede ser válido


2. Yaml editor

Para editar ficheros YAML



miércoles, 5 de mayo de 2021

Gradle-7 (1) Crear una libraría jar. Utilizar Lombok y librerías jar locales

1. Introducción

2. Crear un proyecto desde Eclipse EE

3. Cambiar la versión de java a java 16 

4. build.gradle

5. Incluir una jar propio (local)

6. Generar el jar

7. Agregar la dependencia Lombok.jar

8. Resolución de problemas


1. Introducción

Se pretende migrar desde Maven a Gradle, para ello empezamos con un ejemplo sencillo y creamos una libreria jar, a la que añadiremos como dependencia una libreria jar lcal y también a Lombok que cuesta un poco más.

2. Crear un proyecto desde Eclipse EE

Desde el menú:

File-> New -> Gradle -> Gradle Project ->NEXT

Aparece una pantalla que dice "How to experience the best Gradle integration" y le damos NEXT

Le damos el nombre del proyecto (en mi caso "XimoProject") y seleccionamos "Use default location" y NEXT



Indicamos la version 7.0 de Gradle y  donde localizar el jdk y FINISH (ANTICUADO NO utilizar la version de gradle superior a la 6.6!!)


Y vemos que nos ha creado esta estructura del proyecto



Ha creado 2 clases, una src/main/java/Library.java y otra en src/text/java/LibaryTest.java

Como vemos, el JRE System library és el JavaSE-13 que debemos de cambiar por el 16. 

3. Cambiar la versión de java a java 16 (anticuado, no utilizar la version de java 16 pues tenemos problemas con el cambio de nombres de javax a jakarta)

Para ello , nos situmanos en el "Project Explorer" sobre XimoProject-lib(in lib) y con el botón derecho seleccionamos "Properties", y marcamos Java Build Path en el menú izquierdo.


Marcamos dentro de ModulePath -> JRE System Library [JavaSE-13] y le damos al botón Edit


Ahora se trata de buscar en el botón Environments el casar el tipo de java con su localización. en este caso nos interesa Java 16


Y cuadramos el tipo y el jdk (16)


Si por algún motivo no apareciera el jdk 16 habría que buscarlo en en el botón Installed JREs


Le daríamos al botón Add y localizariamos donde está instalado el jdk


Le damos a Standard VM y NEXT


Le damos al botón "Directory" y localizamos donde está nuestro jdk y luego le damos a FINISH

4. build.gradle

Este fichero está en la carpeta XimoProject-lib (lib)

y el contenido generado es:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java library project to get you started.
 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
 * User Manual available at https://docs.gradle.org/7.0/userguide/building_java_projects.html
 */

plugins {
    // Apply the java-library plugin for API and implementation separation.
    id 'java-library'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.0-jre'
}


Lo que hay que saber:

Línea 11: El plugin para crear jars es "java-library"

Línea 16: Utilizaremos el repositorio de maven central

En principio nos ha creado 3 tipos de depenedencias, que se definen según el equivalente en maven de groupId, artifactId y version, pero en este caso supone que seguimos ese orden y separa los valores por ":", en este caso 'junit:junit:4.13.1' és equivalente en Maven a :

1
2
3
4
5
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.13.1</version>
</dependency>

El primer tipo de dependencia afevta al test y es testImplementation

El segundo tipo es api que nos hace accesible a todos los elementos de esta librería. Se referencia a las librerias de la forma "Maven" separando los campos por ":" como hemos visto antes

El tercero y más recomendable es implementation, que sirve para que utilicemos esta librería pero que no exportemos con nuestro jar la visibilidad de los elementos de esta librería. Se utiliza el formato "maven" separando los campos por ":"


5. Incluir una jar propio (local)

Para ello cremos una carpeta "mylibs" que cuelgue directamente de XimoProject-lib( in lib)


Metemos un jar (por ejemplo he bajado el jar de Apache "commons-lang3-3.12.0.jar") dentro de mylibs


Ahora hay que definirlo en el "build.gradle

con lo que la sección de dependencies quedaría


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.0-jre'
    
    // This dependency is for local jars in the folder mylibs
    implementation files('mylibs/commons-lang3-3.12.0.jar')
}

la línea 12 indica que referenciamos desde un fichero en ruta relativa desde la carpeta "lib" o XimoProject-lib (in lib), y no usamos el estilo "Maven" con campos separados por ":"


6. Generar el jar

Primeramente en el Project Explorer, con el botón derecho del mouse, seleccionar Graddle --> Refresh Gradle Project

Buscar el tab de Gradle Tasks, marcar XimoProject, ir entrando en el árbol darle dos clicks al "build" indicado en figura (el que cuelga de XipoProject-lib-build)


Y en la consola sale que tod ha salido bien:

Working Directory: /home/eduard/WORKSPACES/WS_VAADIN07/XimoProject
Gradle user home: /home/eduard/.gradle
Gradle Distribution: Specific Gradle version 7.0
Gradle Version: 7.0
Java Home: /home/eduard/MyPrograms/jdk-16.0.1
JVM Arguments: None
Program Arguments: None
Build Scans Enabled: false
Offline Mode Enabled: false
Gradle Tasks: build

> Task :lib:compileJava
> Task :lib:processResources NO-SOURCE
> Task :lib:classes
> Task :lib:jar
> Task :lib:assemble
> Task :lib:compileTestJava
> Task :lib:processTestResources NO-SOURCE
> Task :lib:testClasses
> Task :lib:test
> Task :lib:check
> Task :lib:build

BUILD SUCCESSFUL in 3s
4 actionable tasks: 4 executed

Y el jar se guarda en XimoProject/lib/build/libs/lib.jar

Siendo XimoProject la carpeta del proyecto y lib la carpeta que en el Project Explorer aparece como XimoProject-lib (en lib)

OJO: Esta librería generada lib.jar, no es visible ni accesible desde eclipse al menos desde la perspectiva Java EE!

Por tanto hay que entrar en el administrador de archivos para verla!!!


7. Agregar la dependencia Lombok.jar

Para ello hay que seguir las indicaciones que se dan en Lombok

Veamos el build.gradle como quedaria


plugins {
    // Apply the java-library plugin for API and implementation separation.
    id 'java-library'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit test framework.
    testImplementation 'junit:junit:4.13.1'

    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:30.0-jre'
    
    // This dependency is for local jars in the folder mylibs
    implementation files('mylibs/commons-lang3-3.12.0.jar')

    /***********************************************************************
    *********************** LOMBOK DEFINITION ******************************/
    compileOnly             'org.projectlombok:lombok:1.18.20'
    annotationProcessor     'org.projectlombok:lombok:1.18.20'
    testCompileOnly         'org.projectlombok:lombok:1.18.20'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
    /************************************************************************/
    
}

8. Resolución de problemas


A veces hay alguna configuracion antigua de gradle guardada en user.gradle por tanto se tendrá que borrar este fichero para que Eclipse genere uno nuevo con datos actualizados

sábado, 17 de abril de 2021

Maven (4) y Eclipse: Usar symblinks como alternativa a maven multi-module. Pros y contras

 0. Introducción

Una de las alternativas a no repetir código es utilizar los symblinks o enlaces simbólicos de ficheros.

En principio, vamos a hacer enlaces simbolóicos de carpetas, y se van a hacer de forma relativa es decir, en vez de utilizar

ln -s /home/ximodante/WORKSPACE/Project01/src/main/java/package01 /home/ximodante/WORKSPACE/Project02/src/main/java/package01

se utilizará


cd /home/ximodante/WORKSPACE/Project02/src/main/java

ln -s ../../../../Project01/src/main/java/package01 package01

#para deshace el link, utilizar unlink package01

PROS:

  • No se duplica el código, con los problemas de incongruencias que puede haber por duplicidades de código
CONTRAS:
  • Para hacer las copias de seguridad hay que hacerlas de todo el workspace y no de cada proyecto por separado
  • Los vínculos no pueden hacerse fuera del workspace
  • Si recuperamos la copia de seguridfad en Windows, lo mas seguro es que no reconozca  los vínculos y al revés también pasa.
  • Para tener la ventaja, debemos tener todos los proyectos en un mismo workspace, con lo que al abrir el workspace se vuelve mas pesado 
  • Si cambiamos el nombre de alguna carpeta o proyecto, la liamos parda
  • Eclipse marca los paquetes que son vinculos, pero NO MARCA como vínculos los paquetes HIJOS. Por lo tanto hay que tener cuidado
PRECAUCIONES:
  1. Hacer la copia de seguridad siempre de todo el Workspace
  2. No hacer referencias con symblinks a otros workspaces
  3. Rediseñar el proceso de copia de seguridad
  4. Darse cuenta que estamos trabajando con archivos vinculados, y cualquier cambio en uno de ellos afecta a todos los elementos del proyecto
  5. Hacer copias de seguridad frecuentes.
  6. Ir con cuidado con renombrar los paquetes y proyectos

domingo, 11 de octubre de 2020

ECLIPSE muy lento, ¿Cómo espabilarlo?


En máquinas obsoletas, las nuevas versiones de eclipse van muy lentas, para agilizar un poco se puede hacer:

  1. Quitar la opción de               Project   -> Build Automatically
  2. Quitar la validación de JPA: Window-> Preferences -> Validation -> Buscar el JPA de la tabla y desmarcarlo.


Ahora cuando queramos ejecutar en el servidor:
La primera vez al abrir el workspace:
  1. Botón derecho sobre el proyecto: Run As --> Maven Clean
  2. Botón derecho sobre el proyecto: Maven  --> Update project
  3. Apretar el icono de Build

Cuando no se hagan cambios muy significativos, solo se apretara el iocono del Build.


miércoles, 12 de agosto de 2020

Certificados en Java (2). Configurar Tomcat (tambien en Eclipse) https autentificacion cliente certificado. Tarjeta, Smartcard cliente

1. Configurar Tomcat  para https

Segun Namecheap  podemos instalar en Tomcat certificados .jks y tembién .p12 (pkcs12)

1.a con certificado jks

Supongamos que tenemos un certificado p12 llamado mykeystore.jks con contraseña "mypassword", entonces:

Modificamos el conector en el fichero server.xml de la carpeta conf de tomcat y para el puerto 8443 para que quede así

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<!-- Define a SSL HTTP/1.1 Connector on port 8443
        This connector uses the JSSE configuration, when using APR, the
        connector should be using the OpenSSL style configuration
        described in the APR documentation -->
    <Connector port="8443" 
              protocol="HTTP/1.1"
              SSLEnabled="true"
              maxThreads="150" 
              scheme="https" 
              secure="true"
              clientAuth="false" <!-- true to read client certificate -->
              sslProtocol="TLS" <!--"TLSv1.2" -->
              keyAlias="tomcat" <!-- Alias cuando se crea mykeystore,jks -->
	      keystoreFile="/home/ximo/mykeystore.jks"
	      keystorePass="mypassword" 
              
    /> 

Y ahora vamos al directorio "bin" del tomcat y paramos y rearrancamos el servicio

./shutdown.sh
./startup.sh

1.b con certificado pem

Supongamos que hemos obtenido de LetsEncrypt, estos certificados que estan en la carpeta  /etc/letsencrypt/live/midominio.es
  • cert.pem (certificado "solo")
  • chain.pem (cadena de certificados del root)
  • fullchain.pem (certificado "solo" + cadena de certificados del root. Equivale a los 2 ficheros anteriores juntos)
  • privkey.pem (clave privada)
Modificamos el conector en el fichero server.xml de la carpeta conf de tomcat y para el puerto 19443 para que quede así

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
 <Connector port="19443"
      protocol="HTTP/1.1"
      SSLEnabled="true"
      maxThreads="150"
      scheme="https"
      secure="true"
      sslProtocol="TLS"

      clientAuth="true"
      keyAlias="tomcat"


      SSLCertificateFile="/etc/letsencrypt/live/midominio.es/cert.pem"
      SSLCertificateChainFile="/etc/letsencrypt/live/midominio.es/chain.pem"
      SSLCertificateKeyFile="/etc/letsencrypt/live/midominio.es/privkey.pem"
   />

  
Como vemos,:
  1.  No nos ha hecho falta el fullchain.pem
  2. Tampoco nos ha hecho falta ninguna contraseña
  3. Estamos trabajando en un puerto https adicional 19443 (junto con el anterior 8443) sin ningún problema

Y ahora vamos al directorio "bin" del tomcat y paramos y rearrancamos el servicio

./shutdown.sh
./startup.sh


2. Obtener un certificado jks versión fácil


En un blog anterior hemos creeado una entidad certificadora. 


Para ello hay que seguir las instrucciones de Mkyong :

Nos situamos en el directorio /home/ximo/mycerts y creamos un keystore con un certificado auto firmado:

keytool -genkey -alias tomcat -keyalg RSA -keystore mykeystore.jks

OJO: El alias tomcat del mykeystore es el que se debe de indicar en el "keyAlias" del web.xml del tomcat
nos pide una nueva contraseña para el nuevo keystore por ejemplo "mypassword"

podemos listar el contenido del keystore con

keytool -list -v -keystore mykeystore.jks



3. Obtener un certificado jks con un certificado emitido por nuestra entidad certificadora.

Aprovechamos todos los pasos anteriores y generamos el Certificate Signing Request CSR. Para ello volvemos al directorio  /home/ximo/mycerts y tecleamos

keytool -certreq -alias tomcat1 -file mytomcat.csr -keystore mykeystore.jks

Observar que el alias el mismo que hemos creado antes (tomcat)  y nos ha creado el fichero mytomcat.csr


OJO: Para obtener cada una de las DNS, debemos hacer este comando:

nslookup 192.168.2.2

siendo 182.168.2.2 la dirección IP del servidor que queremos crear el certificado, y nos devuelve:

ws.ximodante.es
otro.ximodante.es

Y con esta información de los DNS creamos el fichero de configuración siguiente (mytomcat.conf):

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = 192.168.2.2
DNS.2 = localhost --> SOLO PARA PUEBAS en PRE
DNS.3 = otro.ximodante.es
DNS.4 = ws.ximodante.es

Por tanto debeis cambiar a la IP que realmente está usando el servidor 

Ahora generamos el certificado

openssl x509 -req -in mytomcat.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out mytomcat.crt -days 825 -sha256 -extfile mytomcat.conf
 
Hay que tener en cuenta que debemos disponer de los certificados de nuestra entidad certificadora (myCA.key y myCA.pem) obtenidos en el post anterior.

Finalmente importamos el certificado generado usando el mismo alias "tomcat" a nuestro almacén de claves.

keytool -import -alias tomcat1 -file mytomcat.crt -keystore mykeysore.jks

Y rearrancamos el servicio de Tomcat como hemos hecho antes:


./shutdown.sh
./startup.sh

Y si entramos en el navegador se quejará, salvo que le indiquemos al navegador que confie en nuestra entidad certificadora.

4. Autentificación en el servidor con certificado de cliente.


Si queremos que el cliente nos muestre su certificado, hay que indicarle en la línea 11 del fragmento anterior de servers.xml:

clientAuth="true" 

Con lo que nos pide el certificado de cliente y podemos autenticarnos en el servidor mediante certificado.

5. Autentificación en el servidor con tarjeta criptográfica (en cliente).

Cuando se intenta acceder con tarjeta criptográfica en el cliente, nos da este error en el cliente:
SSL_ERROR_BAD_CERT_ALERT

Supongo que tal vez haya que indicar un truststore que contenga el certificado raíz.
Parece ser que tomcat utiliza el alacen de certificados de java.

Se va a copiar el fichero keystore  java_path/lib/security/cacerts a una carpeta de pruebas y con el programa keystore explorer, añadimos los certificados raiz de la etidad certificadora de la tarjeta obtenidas de la ACCV 

En concreto añadimos el certificado raiz, los 110 y 120

y vamos a modificar el server.xml para que tenga un truststore


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<!-- Define a SSL HTTP/1.1 Connector on port 8443
        This connector uses the JSSE configuration, when using APR, the
        connector should be using the OpenSSL style configuration
        described in the APR documentation -->
    <Connector port="8443" 
              protocol="HTTP/1.1"
              SSLEnabled="true"
              maxThreads="150" 
              scheme="https" 
              secure="true"
              clientAuth="false" <!-- true to read client certificate -->
              sslProtocol="TLS" <!--"TLSv1.2" -->
              keyAlias="tomcat" <!-- Alias cuando se crea mykeystore,jks -->
	      keystoreFile="/home/ximo/mykeystore.jks"
	      keystorePass="mypassword" 
              
    /> 



6. Configurar el tomcat de Eclipse.



"If you've already created the server, you can edit the server.xml template it copies. If you use the project explorer, It is under Other Projects->Servers->Tomcat Server Name->server.xml"

Así de fácil localizamos el server.xml y lo configuramos como si fuera un tomcat normal.