2. Arreglo del proyecto y solución de errores. Descarga de proyectos de dependencias. java.smartcardio
1. Buscar errores
Le damos al build de la ventana Gradle Tasks
Y nos da un error que no ha podido encontrar la libreria
es.gob.afirma.lib:afirma-lib-jmimemagic:0.0.7.
En Maven central aparecen versiones anterirores a esta. Parece ser que esta versión se encuentra en
https://github.com/ctt-gob-es/clienteafirma-external
Vamos al github y descargamos dicho proyecto al igual que se hizo en el post anterior dentro de la carpeta WS_AUTOFIRMA-APPLET
2. Cargar el proyecto clienteafirma-external
Por tanto que hemos descargado dicho proyecto en nuestro workspace y actuamos como antes:
- Entrar al terminal
- Situarnos en la carpeta de descarga cliente-autofirma-master
- Ejecutar ../Autofirma/gradlew init
- Contestar a las preguntas
- Ver el settings.gradle generado para renombrar la carpeta en este caso es support-libraries
- Ahora importamos el proyecto
subprojects { apply plugin: 'eclipse' apply plugin: 'java' apply plugin: 'java-library' project.jar.destinationDirectory = file("$rootDir/../mynewtargets2") }
3. Referenciar correctamente dependencias cargadas en el proyecto inicial
api 'es.gob.afirma.lib:afirma-lib-jmimemagic:0.0.7'
implementation files( "$rootDir/../mynewtargets2/afirma-lib-jmimemagic-1.0.4.jar", "$rootDir/../mynewtargets2/afirma-lib-oro-1.0.4.jar", )
api 'es.gob.afirma.lib:afirma-lib-itext:1.4'
implementation files( "$rootDir/../mynewtargets2/afirma-lib-itext-1.0.4.jar", )
4. Cambir la versión de java
id 'es.gob.afirma.java-conventions'
Este plugin tiene la versión de java 1.7 y hay que cambiarla a java 17, para ello vamos al fichero
es.gob.afirma.java-conventions.properties
del la carpeta
afirma-client/buildSrc/build/resources/main/META-INF/gradle-plugins/
para que quede así tras modificar la versión de java
/* * This file was generated by the Gradle 'init' task. */ plugins { id 'java-library' id 'maven-publish' } repositories { mavenLocal() maven { url = uri('https://repo.maven.apache.org/maven2/') } } group = 'es.gob.afirma' version = '1.8' //java.sourceCompatibility = JavaVersion.VERSION_1_7 java.sourceCompatibility = JavaVersion.VERSION_17 publishing { publications { maven(MavenPublication) { from(components.java) } } } tasks.withType(JavaCompile) { options.encoding = 'utf-8' } tasks.withType(Javadoc) { options.encoding = 'utf-8' }
5. Definir las dependencias en settings.gradle del proyecto padre (afirma-client)
En el fichero settings.gradle vamos a ñadir dos partes, la primera (en color amarillo) és referente a los repositorios a buscar (en concreto añadimos el repositorio "../mynewtargets2") y la segunda en color naranja, són las referencias a las librerias a utilizar.
En el caso de las referencias a utilizar , hay que cambiar en cada build.gradle cada una de ls referencia indicadas y cambiarlas por su alias,
Por ejemplo par ala línea del settings.gradle
library('json', 'org.json:json:20201115')
hay que sustituir en todos los build.grlade
api 'org.json:json:20201115'
por
api libs.json
Por tanto el settings.gradle quedaria:
/* * This file was generated by the Gradle 'init' task. */ rootProject.name = 'afirma-client' include(':afirma-crypto-batch-client') include(':afirma-crypto-xades') include(':afirma-ui-core-jse') include(':afirma-server-triphase-signer-document') include(':afirma-crypto-xadestri-client') include(':afirma-core-keystores') include(':afirma-crypto-cades') include(':afirma-crypto-xmlsignature') include(':afirma-crypto-core-xml') include(':afirma-crypto-validation') include(':afirma-crypto-odf') include(':afirma-crypto-pdf') include(':afirma-crypto-cadestri-client') include(':afirma-server-triphase-signer-cache') include(':afirma-ui-core-jse-keystores') include(':afirma-ui-simpleafirma-plugins') include(':afirma-keystores-filters') include(':afirma-crypto-cms') include(':afirma-core-massive') include(':afirma-ui-simpleafirma-plugins-manager') include(':afirma-ui-simpleafirma-plugin-hash') include(':afirma-crypto-ooxml') include(':afirma-crypto-core-pkcs7') include(':afirma-ui-simpleafirma-plugin-validatecerts') include(':afirma-core') include(':afirma-crypto-padestri-client') include(':afirma-server-triphase-signer-core') include(':afirma-crypto-cades-multi') include(':afirma-crypto-core-pkcs7-tsp') include(':afirma-keystores-mozilla') include(':afirma-crypto-pdf-common') project(":afirma-ui-simpleafirma-plugins").projectDir = file('afirma-simple-plugins') project(":afirma-ui-simpleafirma-plugins-manager").projectDir = file('afirma-simple-plugins-manager') project(":afirma-ui-simpleafirma-plugin-hash").projectDir = file('afirma-simple-plugin-hash') project(":afirma-ui-simpleafirma-plugin-validatecerts").projectDir = file('afirma-simple-plugin-validatecerts') dependencyResolutionManagement { repositories { jcenter() mavenCentral() maven { url "https://jitpack.io" } //@see: https://stackoverflow.com/questions/38905939/how-to-import-library-from-jitpack-io-using-gradle //aspose { url "http://repository.aspose.com/repo/" } NO VA !!! //flatDir {dirs "$rootDir/../mynewtargets2","$rootDir/../InsideLibs"} //@see https://stackoverflow.com/a/25966303 flatDir {dirs "$rootDir/../mynewtargets2"} //@see https://stackoverflow.com/a/25966303 //flatDir {dirs "$rootDir/../InsideLibs"} //@see https://stackoverflow.com/a/25966303 } versionCatalogs { libs { //library('commons-lang3', 'org.apache.commons', 'commons-lang3').version { // strictly '[3.8, 4.0[' // prefer '3.9' //} library('junit', 'junit:junit:4.13.2') //library('afirma.itext', 'es.gob.afirma.lib:afirma-lib-itext:1.4') //library('afirma.jmimemagic', 'es.gob.afirma.lib:afirma-lib-jmimemagic:0.0.7') library('afirma.jmulticard', 'es.gob.afirma.jmulticard:jmulticard:1.8') library('afirma.jmulticard.jse', 'es.gob.afirma.jmulticard:jmulticard-jse:1.8') library('afirma.jmulticard.ui', 'es.gob.afirma.jmulticard:jmulticard-ui:1.8') library('apache.pdfbox', 'org.apache.pdfbox:pdfbox:2.0.25') library('apache.santuario', 'org.apache.santuario:xmlsec:2.1.7') library('crypto.xades', 'es.uji.crypto.xades:jxades:0.2.2') library('javax.json', 'org.glassfish:javax.json:1.0.4') library('json', 'org.json:json:20201115') library('spongycastle.core', 'com.madgag.spongycastle:core:1.58.0.0') library('spongycastle.prov', 'com.madgag.spongycastle:prov:1.58.0.0') library('spongycastle.bcpkix', 'com.madgag.spongycastle:bcpkix-jdk15on:1.58.0.0') library('xom', 'com.io7m.xom:xom:1.2.10') //Additional libraries for solving errors library ('itext', 'com.lowagie:itext:4.2.2') } } }
Veamos como quedaria el build.gradle del proyecto afirma-core-keystores
/* * This file was generated by the Gradle 'init' task. */ plugins { id 'es.gob.afirma.java-conventions' } dependencies { api project(':afirma-core') //api project(':afirma-keystores-mozilla') /* api 'es.gob.afirma.jmulticard:jmulticard:1.8' api 'es.gob.afirma.jmulticard:jmulticard-jse:1.8' api 'es.gob.afirma.jmulticard:jmulticard-ui:1.8' */ api libs.afirma.jmulticard api libs.afirma.jmulticard.jse api libs.afirma.jmulticard.ui } description = 'afirma-core-keystores'
y a modo de ejemplo también se incluye el build.gradle del proyecto afirma-core-keystores
/* * This file was generated by the Gradle 'init' task. */ plugins { id 'es.gob.afirma.java-conventions' } dependencies { api project(':afirma-core') api project(':afirma-crypto-cms') api project(':afirma-crypto-cades') api project(':afirma-crypto-core-xml') api project(':afirma-crypto-pdf') api project(':afirma-crypto-pdf-common') api project(':afirma-crypto-xades') api project(':afirma-crypto-ooxml') api project(':afirma-crypto-odf') /* api 'com.madgag.spongycastle:core:1.58.0.0' api 'com.madgag.spongycastle:prov:1.58.0.0' api 'es.gob.afirma.lib:afirma-lib-itext:1.4' api 'org.apache.pdfbox:pdfbox:2.0.25' */ api libs.spongycastle.core api libs.spongycastle.prov //api libs.afirma.itext implementation files( "$rootDir/../mynewtargets2/afirma-lib-itext-1.0.4.jar", ) api libs.apache.pdfbox } description = 'afirma-crypto-validation'
6. Definir las dependencias en build.gradle del proyecto padre (afirma-client). Error de smartcardio
subprojects { apply plugin: 'eclipse' apply plugin: 'java'
apply plugin: 'java-library' project.jar.destinationDirectory = file("$rootDir/../mynewtargets2") eclipse { //Avoids java.smartcardio complaint classpath { file { whenMerged { def jre = entries.find { it.path.contains 'org.eclipse.jdt.launching.JRE_CONTAINER' } jre.entryAttributes['module'] = 'true' jre.entryAttributes['limit-modules'] = 'java.se,jdk.accessibility,jdk.dynalink,jdk.httpserver,jdk.jartool,jdk.javadoc,jdk.jconsole,jdk.jshell,jdk.jsobject,jdk.management.jfr,jdk.net,jdk.nio.mapmode,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported,jdk.unsupported.desktop,jdk.xml.dom,java.smartcardio' jre.entryAttributes['add-modules'] = 'java.smartcardio' //--limit-modules java.se --add-modules java.smartcardio } } } } }
7. Errores de test que fallan.
Veamos los test que fallan:
7.1 TestMIMEDetection del proyecto afirma-core
En este caso se queja porque quiere la libreria afirma-lib-oro
Para ello en el build.gradle debe aparecer esta referencia, quedando así
/* * This file was generated by the Gradle 'init' task. */ plugins { id 'es.gob.afirma.java-conventions' } dependencies { /* api 'es.gob.afirma.lib:afirma-lib-jmimemagic:0.0.7' testImplementation 'junit:junit:4.13.2' */ //api libs.afirma.jmimemagic implementation files( "$rootDir/../mynewtargets2/afirma-lib-jmimemagic-1.0.4.jar", "$rootDir/../mynewtargets2/afirma-lib-oro-1.0.4.jar", ) testImplementation libs.junit } description = 'afirma-core'
7.2 TestSignatureValidation del proyecto afirma-crypto-validation
En este caso falla la función testCadeTAValidation, que hace referencia a un fichero que no se dispone de el, por tanto hay que comentar esta función para que no se ejecute.
6-3 TestRFC2254CertificateFilter del proyecto afirma-keystores-filter
En este caso hay que añadir la referencia al proyecto afirma-keystores-mozilla
quedando así el build.gradle
/* * This file was generated by the Gradle 'init' task. */ plugins { id 'es.gob.afirma.java-conventions' } dependencies { api project(':afirma-core') api project(':afirma-core-keystores') api project(':afirma-keystores-mozilla') //EDU??? /* api 'com.madgag.spongycastle:core:1.58.0.0' api 'com.madgag.spongycastle:prov:1.58.0.0' */ api libs.spongycastle.core api libs.spongycastle.prov } description = 'afirma-keystores-filters'
Tambien es conveniente crear un fichero build.gradle para el proyecto afirma-client con este contenido, para que se generen el los jars en mynewtarget2
subprojects { apply plugin: 'eclipse' apply plugin: 'java' apply plugin: 'java-library' project.jar.destinationDirectory = file("$rootDir/../mynewtargets2") }
Ahora en teroria ya deberia compilar bien el build del proyecto afirma-client
Comentarios
Publicar un comentario