Por ejemplo, tengamos una constante de Java en alguna clase
public class MyClass{ public static final String ENDPOINT="http://example.com" }y tratemos de describir esa clase en AsciiDoctor (razones de documentos corporativos)
==== My class ..... some descripton ..... It is exposed trough http://example.comAhora, cada vez que cambio el punto final, también tengo que actualizar los documentos manualmente (obviamente, buscar y reemplazar IDE hará el truco). ¿Hay alguna manera de incluir la constante de Java en AsciiDoc para que no tenga que copiar su valor en los documentos?
Me encantaría ver algo como {import my.package.MyClass#ENDPOINT} o algo similar.
Escribiría un script de shell (PERL, lo que sea) que agrupe su código Java para una expresión regular algo así como 'class (\w+).*ENDPOINT="([^"]+)' , enviando los resultados a un archivo de inclusión ( ./endpoints.adoc ) usando ':\1_endpoint: \2' , por lo tanto:
:MyClass_endpoint: http://example.com :MyOtherClass_endpoint: http://other.example.com Luego, en la parte superior de su archivo AsciiDoc, inserte: include::endpoints.adoc[]
y luego consulte {MyClass_endpoint} y {MyOtherClass_endpoint} en el cuerpo.
Luego, simplemente ejecute el script como parte de su cadena de herramientas antes de llamar a AsciiDoctor.
Otra solución es usar el patrón de inclusión de asciidoctor que se describe aquí. https://docs.asciidoctor.org/asciidoc/latest/directives/include-tagged-regions/
En breve.
Defina una región etiquetada:
public class MyClass{ //tag::endpointdefinition[] public static final String ENDPOINT="http://example.com" //end::endpointdefinition[] }incluirlo en su documento
[source,java] ---- include::pathYourFile.java[tag=endpointdefinition] ----Para optimizarlo un poco, puede dividir sus líneas de forma diferente en el archivo java y colocar la definición de etiqueta en eso. También puede eliminar la fuente, incluido el archivo java.