[JAVA] PlantUML-Nutzungsnotiz

Da es lang sein wird, können Sie das Diagramm nur mit dem Klassendiagramm und dem Sequenzdiagramm zeichnen.

Was ist PlantUML?

Umgebung

Das Betriebssystem ist Windows 10.

Java

> java --version
openjdk 11.0.6 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.6+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.6+10, mixed mode)

Die Installationsmethode wird weggelassen.

PlantUML Körper

https://plantuml.com/ja/download

Lassen Sie plantuml.jar von hier fallen. Zum Zeitpunkt der Bestätigung war es "plantuml.1.2020.7.jar".

Graphviz http://www.graphviz.org/download/

Es sieht aus wie die Software, mit der die Figur gezeichnet wurde. Graphviz - Wikipedia

Dies ist praktisch erforderlich, da dies erforderlich ist, wenn Sie andere Diagramme als Sequenzdiagramme und Aktivitätsdiagramme ** erstellen möchten.

Ich habe "2.38" fallen lassen.

Geben Sie den Speicherort von dot.exe an

Wenn Sie PlantUML ausführen, müssen Sie die Position von "dot.exe" in Graphviz angeben. Die Benennungsmethode ist eine der folgenden (in der Reihenfolge der zu übernehmenden Priorität angeordnet).

  1. Geben Sie mit der Option -graphvizdot an
  2. Geben Sie in der Systemeigenschaft GRAPHVIZ_DOT an
  3. Setzen Sie die Umgebungsvariable GRAPHVIZ_DOT

Wenn der Ordner, in dem Graphviz installiert ist, "C: \ Graphviz" ist, geben Sie ihn wie folgt an.

-Wenn mit der Option graphvizdot angegeben


> java -jar plantuml.jar -graphvizdot C:\Graphviz\bin\dot.exe ...

Wenn in den Systemeigenschaften angegeben


> java -DGRAPHVIZ_DOT=C:\Graphviz\bin\dot.exe -jar plantuml.jar ...

Wenn durch Umgebungsvariable angegeben


> set GRAPHVIZ_DOT
GRAPHVIZ_DOT=C:\Graphviz\bin\dot.exe

VSCode Wenn Sie die folgenden Plug-Ins verwenden, legen Sie die Umgebungsvariable "GRAPHVIZ_DOT" fest, bevor Sie VSCode ausführen.

PlantUML PlantUML - Visual Studio Marketplace

--Plug-In zum Schreiben von PlantUML mit VSCode

plantuml.jpg

Markdown Preview Enhanced Markdown Preview Enhanced - Visual Studio Marketplace

plantuml.jpg

Hello World

hello.pu


@startuml
Hello <|-- World
@enduml

--Erstellen Sie eine Textdatei und beschreiben Sie den Inhalt als ↑

Lauf


> java -jar plantuml.jar hello.pu

hello.png

hello.png

Ausführen über die Befehlszeile

Dateispezifikation

> dir /b
fuga.pu
hoge.pu
piyo.pu

> java -jar plantuml.jar hoge.pu fuga.pu piyo.pu

> dir /b
fuga.png
fuga.pu
hoge.png
hoge.pu
piyo.png
piyo.pu

Verzeichnisspezifikation

Ordnerstruktur


`-hoge/
  |-plantuml.pu
  |-markdown.md
  |-JavaSource.java
  `-fuga/
    `-fuga.pu

--Drei Dateien werden direkt unter dem Verzeichnis "hoge" abgelegt. ――Der Inhalt ist wie folgt

plantuml.pu

@startuml
class PlantUml
@enduml

markdown.md

```
@startuml
class Markdown
@enduml
```

JavaSource.java

/**
 * @startuml
 * class JavaSource {
 *   - String message
 * }
 * @enduml
 */
public class JavaSource {}

fuga.pu

@startuml
class Fuga
@enduml

Lauf

> java -jar plantuml.jar hoge

Nach der Ausführung


`-hoge/
  |-plantuml.pu
  |-plantuml.png
  |-markdown.md
  |-JavaSource.java
  |-JavaSource.png
  `-fuga/
    `-fuga.pu

--plantuml.png und JavaSource.png wurden generiert

plantuml.png

plantuml.png

JavaSource.png

JavaSource.png

Geben Sie mit einem Platzhalter an

> java -jar plantuml.jar "hoge/**"

Ausführungsergebnis


`-hoge/
  |-plantuml.pu
  |-plantuml.png
  |-markdown.md
  |-markdown.png
  |-JavaSource.java
  |-JavaSource.png
  `-fuga/
    |-fuga.pu
    `-fuga.png

--markdown.png und fuga.png werden ebenfalls generiert

markdown.png

mardown.png

fuga.png

fuga.png

Geben Sie das Ausschlussziel an

> java -jar plantuml -x "**/*.pu" "hoge/**"

Ausführungsergebnis


`-hoge/
  |-plantuml.pu
  |-markdown.md
  |-markdown.png
  |-JavaSource.java
  |-JavaSource.png
  `-fuga/
    `-fuga.pu

Zeichencode-Spezifikation

> java -jar plantuml.jar -charset UTF-8 hello.pu

--Character-Code wird mit der Option -charset angegeben

Lesen Sie von der Standardeingabe

> type plantuml | java -jar plantuml.jar -pipe > result.png

Wenn es mehrere Figurenbeschreibungen gibt

hoge.pu


@startuml
class Hoge
@enduml

@startuml
class Fuga
@enduml

@startuml
class Piyo
@enduml

--Wenn sich in einer Datei mehrere @startuml ... @ enduml Beschreibungen befinden

Lauf


> java -jar plantuml.jar hoge.pu

Ausführungsergebnis


> dir /b
hoge.png
hoge.pu
hoge_001.png
hoge_002.png

hoge.png

hoge.png

hoge_001.png

hoge_001.png

hoge_002.png

hoge_002.png

Geben Sie den Dateinamen für jede Figur an

hoge.pu


@startuml hoge
class Hoge
@enduml

@startuml fuga
class Fuga
@enduml

@startuml piyo
class Piyo
@enduml

Lauf


> java -jar plantuml.jar hoge.pu

Ausführungsergebnis


> dir /b
fuga.png
hoge.png
hoge.pu
piyo.png

hoge.png

hoge.png

fuga.png

fuga.png

pioy.png

piyo.png

Hilfe anzeigen

> java -jar plantuml.jar -h

--Hilfe kann mit -h oder -help angezeigt werden

Verbreitet

Kommentar

@startuml no-scale
'Dies ist ein Kommentar
Hello <|-- World
@enduml

Titel

@startuml
title Hello Title
Hello <|-- World
@enduml

hoge.png

Mehrzeiliger Titel

@startuml
title
Hello
Title
end title
Hello <|-- World
@enduml

hoge.png

Schreiben Sie in Markup-Sprache

@startuml
title
* __Hello__
* **World**
end title
Hello <|-- World
@enduml

hoge.png

Bildbeschriftung

@startuml
Bildunterschrift Abbildung 1
Hello <|-- World
@enduml

hoge.png

Kopfzeile Fußzeile

@startuml
header Hello
Hello <|-- World
footer World
@enduml

hoge.png

Geben Sie die Position an

@startuml
left header Hello
Hello <|-- World
right footer World
@enduml

hoge.png

Schreiben Sie in mehreren Zeilen

@startuml
header
Hello
Header
end header

Hello <|-- World

footer
World
Footer
end footer
@enduml

hoge.png

Gebrauchsanweisung

@startuml
legend
Hello World
end legend

Hello <|-- World
class FizzBuzz
@enduml

hoge.png

Geben Sie die Position an

@startuml right
legend right
Right
end legend

Hello <|-- World
class FizzBuzz
@enduml

right.png

@startuml top
legend top
Top
end legend

Hello <|-- World
class FizzBuzz
@enduml

top.png

@startuml top-left
legend top left
Top Left
end legend

Hello <|-- World
class FizzBuzz
@enduml

top-left.png

Expansionsrate

@startuml no-scale
Hello <|-- World
@enduml

@startuml scale-1.5
scale 1.5
Hello <|-- World
@enduml

@startuml scale-0.5
scale 0.5
Hello <|-- World
@enduml

plantuml.jpg

Creole

@startuml
note left
  --Überschrift--
  =Überschrift 1
  ==Überschrift 2
  ===Überschrift 3
  
  --Nicht nummerierte Liste--
  *Listing 1:
  *Listing 2:
  **Listing 2-1
  *Listing 3:

  --Nummeriert--
  #Nummerierte Liste 1
  #Nummerierte Liste 2
  ##Nummerierte Liste 2-1
  #Nummerierte Liste 3

  --Dekoration--
  * **Fett gedruckt**
  * //kursiv//
  * ""Schriftart gleicher Breite(monospace)""
  * --Stornierungslinie--
  * __Unterstreichen__

  --Tabelle--
  |= |= Column1 |= Column2 |
  |1 |Value1-1  |Value1-2  |
  |2 |Value2-1  |Value2-2  |

  --HTML--
  * <color:red>Angabe des Farbnamens</color>
  * <color:#00FF00>Farbcode-Spezifikation</color>
  * <back:skyblue>Hintergrundfarbe</back>
  * <size:18>Schriftgröße</size>
  * <b>Fett gedruckt</b>

  --Baumstruktur--
  |_build.gradle
  |_src
    |_main
      |_java
        |_**bold**
        |_--strike--
        |_//itaric//
        |___underline__
        |_""monospace""
    |_test

  --Unicode--
  * <U+20BB7>

  --Escape--
  * **Dies wird fett sein**
  * ~**Das wird nicht mutig**

  --Horizont--
  --Fügen Sie den Titel ein--
  ----
  ==Fügen Sie den Titel ein==
  ====
  ..Fügen Sie den Titel ein..
  ....
end note
@enduml

hoge.png

Geben Sie die Schriftart an

@startuml
skinparam DefaultFontName Meilio
Guten Morgen<|--Welt
@enduml

hoge.png

> java -jar plantuml.jar -language
...
;skinparameter
;536
ActivityBackgroundColor
ActivityBarColor
ActivityBorderColor
ActivityBorderThickness
ActivityDiamondBackgroundColor
ActivityDiamondBorderColor
ActivityDiamondFontColor
...

Klassen Diagramm

Deklarieren Sie eine Klasse

@startuml
class Hello
class World
@enduml

hoge.png

Deklarieren Sie die Schnittstelle

@startuml
interface Hello
interface World
@enduml

hoge.png

Deklarieren Sie eine abstrakte Klasse

@startuml
abstract class Hello
@enduml

hoge.png

Enum deklarieren

@startuml
enum HelloWorld {
    ONE
    TWO
    THREE
}
@enduml

hoge.png

Beschreiben Sie die Beziehungen zwischen Typen

Ähnliche Links)

@startuml
Hello -- World
@enduml

hoge.png

Ausdruck der Induzierbarkeit

@startuml
class One
One --> Two
Three <-- Four
Five <--> Six
Seven x-- Eight
Nine --x Ten
@enduml

hoge.png

-- <,> , x kann Induzierbarkeit ausdrücken

Abhängigkeit

@startuml
One ..> Two
Three <.. Four
@enduml

hoge.png

Verallgemeinerung

@startuml
One --|> Two
Three <|-- Four
@enduml

hoge.png

Realisierung

@startuml
One ..|> Two
Three <|.. Four
@enduml

hoge.png

Anhäufung

@startuml
One --o Two
Three o-- Four
@enduml

hoge.png

Komposition

@startuml
One --* Two
Three *-- Four
@enduml

hoge.png

Verwandter Name

@startuml
One -- Two : Hoge
Three -- Four : Fuga >
Five -- Six : < Piyo
@enduml

hoge.png

Rollenname und Vielfalt

@startuml
One "Foo" -- Two 
Three -- "Bar" Four
Five "1" -- "1..*" Six
Seven "1 Fizz" -- "~* Buzz" Eight
@enduml

hoge.png

Definition der Feldmethode

@startuml
class Hello {
    one: String
    three(param1: String, param2: int): boolean
    String two
    int four(List<String> param)
}
@enduml

hoge.png

Sichtweite

@startuml
class Hello {
    - privateField: int
    # protectedField: int
    ~ packagePrivateField: int
    + publicField: int

    - privateMethod(): void
    # protectedMethod(): void
    ~ packagePrivateMethod(): void
    + publicMethod(): void
}
@enduml

hoge.png

@startuml
skinparam classAttributeIconSize 0
class Hello {
    - privateField: int
    # protectedField: int
    ~ packagePrivateField: int
    + publicField: int

    - privateMethod(): void
    # protectedMethod(): void
    ~ packagePrivateMethod(): void
    + publicMethod(): void
}
@enduml

hoge.png

Abstraktes Mitglied

@startuml
class Hello {
    {abstract} one: int
    {abstract} two(): int
}
@enduml

hoge.png

Statisches Mitglied

@startuml
class Hello {
    {static} ONE: int
    {static} two(): int
}
@enduml

hoge.png

Stereotyp

@startuml
class Hello <<Hoge>>
class World <<Fuga>> {
    message: String
}
@enduml

hoge.png

Vorlage

@startuml
class Hello<H>
class World<W> <<Hoge>>
@enduml

hoge.png

Schreiben Sie Realisierungen und Verallgemeinerungen wie Java-Code

@startuml
interface One
interface Two
interface Three extends Two
interface Four
class Five implements One, Three
class Six extends Five implements Four {
    field: String
    method(): void
}
@enduml

hoge.png

Paket

@startuml
package one.two {
    class Hello
}

package three.four {
    World -- Hello
}
@enduml

hoge.png

Beachten Sie die Reihenfolge der Erklärung

Wenn die Reihenfolge der Paketdeklaration umgekehrt ist


@startuml
package three.four {
    World -- Hello
}

package one.two {
    class Hello
}
@enduml

hoge.png

Hinweis

@startuml
class Fizz
note left: fizz

class Buzz
note right: buzz

class Foo
note top: foo

class Bar
note bottom: bar
@enduml

hoge.png

-Hinter der Klassenerklärung etc.note <top|bottom|left|right>: <Kommentar>Durch Schreiben können Sie eine Notiz für das unmittelbar vorhergehende Element schreiben.

Geben Sie das Element an, an das eine Notiz angehängt werden soll

@startuml
Fizz -- Buzz
note left of Fizz: fizz
note right of Buzz: buzz
@enduml

hoge.png

--note <Position> von <Ziel>: Durch Schreiben von <Kommentar> können Sie dem durch <Ziel> angegebenen Element eine Notiz hinzufügen.

Machen Sie sich Notizen zu Assoziationen

@startuml
Fizz -- Buzz
note on link: fizz-buzz
note left: buzz
@enduml

hoge.png

Geben Sie der Notiz einen Namen

@startuml
note "Hello World" as n1
Hello -- n1
World .. n1

note "Fizz Buzz" as n2
@enduml

hoge.png

Schreiben Sie mehrzeilige Notizen

@startuml
class Hello
note left
Hello
World
end note

Fizz -- Buzz
note on link
Fizz
Buzz
end note
note left of Fizz
fizz
buzz
end note

note as n1
Foo
Bar
end note
@enduml

hoge.png

Sequenzdiagramm

Nachricht synchronisieren

@startuml
Alice -> Bob: Hi
Bob --> Alice: Hi

Alice -> Bob: Is this a pen?
Bob --> Alice: No! This is an apple!!
@enduml

hoge.png

Asynchrone Nachricht

@startuml
Alice ->> Bob: Hi
Alice ->> Bob: Is this a pen?
Alice ->> Bob: Is this a pen??
Alice ->> Bob: Is this a pen???
Alice ->> Bob: Is this a pen????

Bob -> Alice: This is an apple!!!
@enduml

hoge.png

Geben Sie die Reihenfolge der Lebenslinien an

@startuml
participant Alice
participant Bob
participant Carol

Carol -> Bob: Is the tip included?
Bob -> Alice:Werden Sie eines Tages in der Lage sein, Teppen zu übertreffen?
@enduml

hoge.png

Verwenden Sie Symbole für Lebensadern

@startuml
actor Actor
boundary Boundary
control Control
entity Entity
database Database
collections Collections
@enduml

hoge.png

Nachricht an mich

@startuml
Aclie -> Aclie:Lauf nicht weg
Aclie -> Aclie:Lauf nicht weg
Aclie -> Aclie:Lauf nicht weg
Aclie -> Aclie:Lauf nicht weg
Aclie -> Aclie:Lauf nicht weg
@enduml

hoge.png

Nummer Nachrichten

@startuml
Alice -> Bob: Hi
autonumber
Bob -> Carol: Hi
Carol -> Dave: Hi
Bob -> Dave: Hi
@enduml

hoge.png

Geben Sie die Startnummer und das Inkrement an

@startuml
autonumber 3
Alice -> Bob: Hi
Bob -> Carol: Hi
autonumber 2 3
Carol -> Dave: Hi
Bob -> Dave: Hi
@enduml

hoge.png

Pause / Wiederaufnahme der automatischen Nummerierung

@startuml
autonumber
Alice -> Bob: Hi
autonumber stop
Bob -> Carol: Hi
Carol -> Dave: Hi
autonumber resume
Bob -> Dave: Hi
Carol -> Dave: Hi
@enduml

hoge.png

Gruppierung von Nachrichten

@startuml
Alice -> Bob: Is this a pen?
alt yes
    Alice <-- Bob: Yes! This is a pen!!
else no
    Alice <-- Bob: Noooooooo! This is an apple!!!!!
end
@enduml

hoge.png

Wenn verschachtelt


@startuml
Alice -> Bob: Is this a pen?
alt yes
    Alice <-- Bob: Yes! This is a pen!!
else no
    Alice <-- Bob: Noooooooo! This is an apple!!!!!
    loop ∞
        Alice -> Bob: Oh sorry! By the way, is this a pen?
        Alice <-- Bob: Noooooooooooooooooo!!!!
    end
end
@enduml

hoge.png

Erstellen Sie eine Gruppe mit einem beliebigen Namen

@startuml
Gruppenkopie
    Alice -> Bob: Is this a pen?
    Alice <-- Bob: No! This is an apple!!
end
@enduml

hoge.png

Ausführungsspezifikationen

@startuml
activate Alice
Alice -> Bob

activate Bob
Bob -> Carol

activate Carol
Bob <-- Carol

deactivate Carol
Alice <-- Bob

deactivate Bob
@enduml

hoge.png

--activate <Name> kann die Ausführungsspezifikationen der Rettungsleine mit dem angegebenen Namen ausdrücken.

Nest

@startuml
activate Alice
Alice -> Bob

activate Bob
Bob -> Bob
activate Bob
Bob -> Carol

activate Carol
Bob <-- Carol

deactivate Carol
Alice <-- Bob

deactivate Bob
@enduml

hoge.png

Lifeline-Generierung

@startuml
Alice -> Bob
create Carol
Bob -> Carol: new
Bob -> Carol
Bob <-- Carol
Alice <-- Bob
@enduml

hoge.png

Referenz

@startuml
Alice -> Bob
ref over Bob, Carol:Sehen Sie dort
Alice <-- Bob
ref over Alice
Da drüben
Referenz
end ref
@enduml

hoge.png

Rand

@startuml
== Foo ==
Alice -> Bob
Alice <-- Bob

== Bar ==
Bob -> Carol
Bob <-- Carol
@enduml

hoge.png

Nachricht von außen

@startuml
[-> Alice: Hello
Alice ->]: Hello
@enduml

hoge.png

Abstand zwischen Nachrichten

@startuml
Alice -> Bob
Alice <-- Bob

Alice -> Bob
Alice <-- Bob
|||
Alice -> Bob
Alice <-- Bob
||80||
Alice -> Bob
Alice <-- Bob
@enduml

hoge.png

-Zwischen Nachrichten|||Sie können ein wenig Platz lassen, indem Sie ein Sandwich machen

Hinweis

@startuml
Alice -> Bob
note left: Hello
Alice <-- Bob
note right: World
Alice -> Alice
note left
Hello
World
end note
@enduml

hoge.png

Verwendung aus Java

Graphviz-Spezifikation

Abhängigkeitsspezifikation

build.gradle


plugins {
    id "application"
}

sourceCompatibility = 11
targetCompatibility = 11
compileJava.options.encoding = "UTF-8"

mainClassName = "sandbox.plantuml.Main"

repositories {
    mavenCentral()
}

dependencies {
    implementation "net.sourceforge.plantuml:plantuml:8059"
}

Aus String-Quelle lesen

Main.java


package sandbox.plantuml;

import net.sourceforge.plantuml.SourceStringReader;

import java.io.File;

public class Main {

    public static void main(String[] args) throws Exception {
        String source = "@startuml\n"
                      + "Foo <-- Bar\n"
                      + "@enduml";
        final SourceStringReader reader = new SourceStringReader(source);
        reader.generateImage(new File("result.png "));
    }
}

Ausführungsergebnis


> gradle run
...

result.png

Wenn mehrere Bilder definiert sind

Main.java


package sandbox.plantuml;

import net.sourceforge.plantuml.SourceStringReader;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Main {

    public static void main(String[] args) throws Exception {
        String source = "@startuml FooBar\n"
                      + "Foo <-- Bar\n"
                      + "@enduml\n"
                      + "\n"
                      + "@startuml FizzBuzz\n"
                      + "Fizz <-- Buzz\n"
                      + "@enduml";
        final SourceStringReader reader = new SourceStringReader(source);
        try (
            OutputStream fooBar = new FileOutputStream("foobar.png ");
            OutputStream fizzBuzz = new FileOutputStream("fizzbuzz.png ");
        ) {
            reader.generateImage(fooBar, 0);
            reader.generateImage(fizzBuzz, 1);
        }
    }
}

Aus Quelldatei lesen

Ordnerstruktur


|-source.pu
|-build.gradle
`-src/main/java/
  `-sandbox/plantuml/
    `-Main.java

source.pu


@startuml FooBar
Foo <-- Bar
@enduml

@startuml FizzBuzz
Fizz <-- Buzz
@enduml

――Zwei Zahlen sind definiert

Main.java


package sandbox.plantuml;

import net.sourceforge.plantuml.SourceFileReader;

import java.io.File;

public class Main {

    public static void main(String[] args) throws Exception {
        final SourceFileReader reader = new SourceFileReader(new File("source.pu"));
        reader.getGeneratedImages();
    }
}

Ausführungsergebnis


> gradle run
...

Ordnerstruktur


|-source.pu
|-FooBar.png
|-FizzBuzz.png
|-build.gradle
`-src/main/java/
  `-sandbox/plantuml/
    `-Main.java

FooBar.png FooBar.png

FizzBuzz.png FizzBuzz.png

Referenz

Recommended Posts

PlantUML-Nutzungsnotiz
Verwendungshinweise zu JavaParser
Hinweise zur Verwendung von WatchService
Verwendungshinweise zu JUnit5
Hinweise zur Verwendung von Spring Shell
Spring Security-Nutzungsnotiz CSRF
Spring Security-Nutzungsnotiz Run-As
Sicherheit der Verwendungsnotizmethode für Spring Security
Spring Security-Nutzungsnotiz Remember-Me
Hinweise zur Verwendung des Abhängigkeitsmanagement-Plugins
Spring Security-Nutzungsnotiz CORS
Spring Security-Verwendungsnotiztest
Spring Security-Nutzungsnotiz Authentifizierung / Autorisierung
JCA-Verwendungsprotokoll (Java Encryption Architecture)
Antwortheader für die Verwendung von Spring Security
Sitzungsverwaltung für Spring Security-Nutzungsnotizen
Spring Security-Nutzungsnotiz Basic / Mechanismus
Ganzzahliges Memo
Docker-Memo
Spring Security Usage Memo Domänenobjektsicherheit (ACL)
Lombok Memo
Dockerfile-Memo
Java-Memo
AWS-Memo
Dcokerfile Memo
irb Verwendung
Memo Stream