lenguajes de programación

Desarrollo Plugin de NetBeans: lecciones aprendidas al modernizarlos

El repo maven original ya no existe

El repositrio de maven para desarrollar plugins con maven ha cambiado, eso significa que algunas dependencias para versiones muy viejas de tus plugins ya no existen. El nuevo repositorio a usar por mientras es el de Jaroslav Tulach, esperemos que en algún momento todas las dependencias estén en maven central. Debido a ello podemos obtener errores como este:

Failed to execute goal on project DebuggerUtils: Could not resolve dependencies for project de.markiewb.netbeans.plugins:DebuggerUtils:nbm:1.0.0: Failed to collect dependencies at org.netbeans.api:org-netbeans-api-annotations-common:jar:RELEASE81: Failed to read artifact descriptor for org.netbeans.api:org-netbeans-api-annotations-common:jar:RELEASE81: Could not transfer artifact org.netbeans.api:org-netbeans-api-annotations-common:pom:RELEASE81 from/to Maven Central (https://repo1.maven.org/maven2/): Transfer failed for https://repo1.maven.org/maven2/org/netbeans/api/org-netbeans-api-annotations-common/RELEASE81/org-netbeans-api-annotations-common-RELEASE81.pom: Unknown host repo1.maven.org -> [Help 1]

Y la solución para poder otra vez desarrollar Plugins de NetBeans será agregar el siguiente repositorio

<repositories>
        <repository>
            <id>netbeans</id>
            <name>NetBeans</name>
            <url>https://netbeans.apidesign.org/maven2/</url>
        </repository>
</repositories>

Clases privadas referenciadas en el módulo

Aprendí que a partir de Apache NetBeans 11 algunas clases se han vuelto solo para uso interno, por ejemplo en mi caso:

private classes referenced in module: [org.netbeans.modules.editor.lib2.highlighting.HighlightingManager]

En este caso significa para el desarrollo Plugin de NetBeans en que la clase que se encargaba de la administración del resaltado con color del texto seleccionado en el editor de NetBeans ya no se puede usar fuera y por lo tanto se debe reescribir la solución usando el API de lexer y trabajando tóken por tóken.

Falta el candado de lectura al acceder a la jerarquía de tokens

El empezar a trabajar con los tokens provistos por el API de lexer me encontré con un mensaje de alerta que decía:

missing read-lock when accessing tokenhierarchy

esto significa que si el texto se modifica por ejemplo con un borrado antes de que acabemos de leerlo en el editor (en el caso de NetBeans se usa un JEditor de Swing), este se podría corromper y los resultados que esperamos también.

Para solventar este problema solo puse la sentencia entre dos sentencias para poner y quitar un candado respectivamente, en caso de que la instancia fuera un tipo de documento que soporte el bloqueo de lectura de la siguiente manera

if (document instanceof AbstractDocument) {
    ((AbstractDocument) document).readLock();
}
final TokenHierarchy<Document> documentHierarchy = TokenHierarchy.get(document);

final TokenSequence<?> ts = documentHierarchy.tokenSequence();
if (document instanceof AbstractDocument) {
    ((AbstractDocument) document).readUnlock();
}

Módulo XML JAXB PAI de netbeans

En mi caso me topé con el error:

[INFO] Private classes referenced in transitive module: [com.sun.activation.registries.MimeTypeFile, com.sun.activation.registries.LogSupport, com.sun.activation.registries.MailcapFile]
[ERROR] Project depends on packages not accessible at runtime in transitive module org.netbeans.api:org-netbeans-modules-xml-jaxb-api:jar:RELEASE111 which will not be accessible at runtime.

Esto no se soluciona agregando explícitamente la dependencia transitiva, en este caso particular hay que añadir el jar de activation, en mi caso con maven se hace así:

<dependency>
   <groupId>javax.activation</groupId>
   <artifactId>activation</artifactId>
   <version>1.1.1</version>
</dependency>

Depedida

Espero estas pequeñas cosas te sirvan para el momento en que desarrolles tu propio plugin para NetBeans. En este artículo periodicamente agregaré nuevos hallazgos para facilitar tu incursión para tu Desarrollo de Plugin de NetBeans.

javatlacati

Compartir
Publicado por
javatlacati
Etiquetas: javanetbeans

Entradas recientes

Cursos de Código Facilito

Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual…

2 meses hace

Cursos de LinkedIn Learning

Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma…

4 meses hace

Mockito: Snippets de código

Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad.…

4 meses hace

Expresiones regulares en Java: analizar un String

En este tutorial aprenderá a usar expresiones regulares en Java de manera práctica para contar…

4 meses hace

Preguntas para entrevista de programación Java full-stack

¿Entrevista de programación Java fullstack? No te preocupes, te tengo un compendio de preguntas de…

5 meses hace

SoftSkills: cursos de Udemy

Te recomiendo algunos cursos de Udemy para mejorar tus softskills y así mejorar en tu…

5 meses hace