Asciidoctor et Java

Benoit Prioux
benoit.prioux@gmail.com

Me

avatar
  • Développeur Java depuis presque 10 ans
lectra
  • Technical Leader chez Lectra, numéro un mondial des solutions dédiées à l’industrie du textile (machines et logiciels)
bordeauxjug
  • Membre du Bordeaux JUG

    • Conférence bdx.io le 17 octobre !

Une solution : Asciidoc

asciidoc

Langage de balisage, créé en 2002, processeur en Python

Parce que :

  • on se concentre plus sur le fond que sur la forme
  • c’est du texte, donc un éditeur classique suffit
  • on peut gérer l’historique avec un SCM
  • à partir d’une même source, on peut publier vers plusieurs formats
  • on a un peu l’impression de hacker ;-)

Exemple

= Hello, Jug Summer Camp!
Benoit Prioux <benoit.prioux@gmail.com>

Introduction à http://asciidoc.org[AsciiDoc].

== Première Section

* foo
* bar

== Deuxième Section

1. item 1
2. item 2

NOTE: C'est l'heure de la démo !

Asciidoctor

dan-allen

  • Implémentation open-source écrite en Ruby
  • Permet de convertir des fichiers asciidoc vers différents backends : docbook, html5, epub, pdf et même deckjs !
  • 12 août 2014 : sortie de la version 1.5.0

    • 1ère version majeure après 2 ans de développement
    • 50 contributeurs, 1800 commits, 1500 tests

Ils utilisent déjà asciidoctor

Et si je ne connais pas Ruby, ce n’est pas pour moi ?

jruby

asciidoctorj

Asciidoctorj en action !

Asciidoctor asciidoctor = Asciidoctor.Factory.create();

Options options = options().backend("html5").get();
String rendered = asciidoctor.convert("*Gras* ou _italique_ ?", options);

System.out.println(rendered);
Console
<div class="paragraph">
<p><strong>Gras</strong> ou <em>italique</em> ?</p>
</div>

Asciidoctor et Maven

pom.xml
<plugin>
  <groupId>org.asciidoctor</groupId>
  <artifactId>asciidoctor-maven-plugin</artifactId>
  <version>1.5.0</version>
  <executions>
    <execution>
      <id>output-html</id>
      <phase>generate-resources</phase>
      <goals>
        <goal>process-asciidoc</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Asciidoctor et Gradle

build.gradle
buildscript {
    repositories {
      jcenter()
    }

    dependencies {
        classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.0'
    }
}

apply plugin: 'org.asciidoctor.gradle.asciidoctor'

Asciidoctor et Ant (unofficial)

<target name="doc">
  <taskdef resource="net/jtools/classloadertask/antlib.xml" classpath="lib/ant-classloadertask.jar"/>
  <classloader loader="thread" classpath="lib/asciidoctor-ant.jar"/>

  <taskdef name="asciidoctor" classname="org.asciidoctor.ant.AsciidoctorAntTask"/>
  <asciidoctor sourceDirectory="src/asciidoc" outputDirectory="build/docs"/>
</target>

Asciidoctor et Javadoc

javadoc

Javadoc avec Asciidoclet
/**
 * This class has the following features:
 *
 * - Support for *foo*
 * - Support for bar
 */
public class Thing implements Something { ... }

Asciidoctor est extensible …​

asciidoctor-diagram

asciiart

Diagram

asciidoctor-diagram et UML

class-diagram

Diagram

sequence-diagram

Diagram

Extensions ruby en java

gem asciidoctor-diagram
<dependency>
    <groupId>rubygems</groupId>
    <artifactId>asciidoctor-diagram</artifactId>
    <version>1.2.0</version>
    <type>gem</type>
    <scope>provided</scope>
<dependency>

AsciidoctorJ et extensions ruby

asciidoctor-maven-plugin
<plugin>
    <groupId>org.asciidoctor</groupId>
    <artifactId>asciidoctor-maven-plugin</artifactId>
    <version>${asciidoctor.version}</version>
    <configuration>
        <gemPath>${project.build.directory}/gems-provided</gemPath>
        <requires>
            <require>asciidoctor-diagram</require>
        </requires>
    </configuration>
    ...
</plugin>

Et si je veux faire une extension, dois-je coder en ruby ?

Nouveau : on peut coder des extensions directement en Java, Groovy, Scala

twitter:binout[]

devient :

<a href="http://www.twitter.com/binout">@binout</a>

/