Was kann man denn sonst noch so mit Computern machen?
Maven ist ein System, mit dem man in Java besonders leicht Bibliotheken (Libraries) verwenden kann, die eine vorgefertigte Funktionalität anbieten. (Man muss Maven nicht verwenden. Das alles könnte man auch in einem "reinen Java-Projekt" machen. Aber mit Maven ist es vieeel einfacher...)
Anleitung:
- Starte Eclipse
- (Im Menü: ) "File" -> "New" -> "Other" auswählen
- (Im Dialog:) "Maven" -> "Maven Project" auswählen
- "Next" klicken
- (Im Dialog: ) Checkbox oben bei "Create a simple project" wählen
- "Next" klicken
- Im Dialog eingeben:
- Group Id:
com.example
- Artifact Id:
cub
" - "Finish" klicken
- Group Id:
In diesem Projekt soll eine Bibliothek verwendet werden, die einige vorgefertigte Funktionen für Chemiker anbietet. Disclaimer: Diese Library ist keine "Empfehlung". Ich stehe in keiner Verbindung mit den Autoren. Es war nur eine der erstbesten Libraries, die bei einer Suche nach "java chemistry library" auftauchten, und die einige interessante Funktionen bietet...
Die library muss als Abhängigkeit ("depencency") zum Projekt hinzugefügt werden.
Anleitung:
- In der "Project Explorer"-Ansicht auf der linken Seite das "cub"-Projekt ausklappen.
- Ganz unten die "pom.xml"-Datei doppelklicken. Es öffnet sich eine Übersichtsseite (dort, wo sonst der Java-Code zu sehen ist).
- Am unteren Rand der Übersichtsseite das Tab mit dem Namen "pom.xml" auswählen. Es erscheint der Editor mit ein bißchen XML-Code.
- Den kompletten Inhalt dieser Datei hiermit ersetzen: (wie das am einfachsten geht, steht unten)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>cub</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.epam.indigo</groupId>
<artifactId>indigo</artifactId>
<version>1.2.3.r0</version>
</dependency>
<dependency>
<groupId>com.epam.indigo</groupId>
<artifactId>indigo-renderer</artifactId>
<version>1.2.3.r0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
- Am einfachsten:
- Den Inhalt hier mit der Maus markieren
- STRG+C drücken (zum Kopieren)
- Zum Editor in Eclipse wechseln
- STRG+A drücken (um alles auszuwählen)
- STRG+V drücken (um das Kopierte einzufügen)
- STRG+S drücken (um die Datei zu speichern)
- Evtl. erscheint dann ein Dialog, in dem steht, dass die Library runtergeladen wird. Einfach kurz warten.
- Wichtig: Das Projekt muss dann "aktualisiert" werden
- Das "cub"-Projekt im Project Explorer auswählen
- ALT+F5 drücken
- Dialog mit "OK" bestätigen
Wenn Software-Projekte im Lauf der Zeit größer werden, werden sie of sehr kompliziert. Eine der wichtigsten Aufgaben von Softwareentwicklern ist es, diese Komplexität so gering wie möglich zu halten, und die Komplexität, die sich nicht vermeiden läßt, handhabbar zu machen.
Praktisch jedes Software-Projekt verwendet Bibliothen, wie in diesem Fall die Chemie-Library. Und oft werden viele Bibliotheken verwendet, mit verschiedenen Versionsnummern. Wenn man Maven verwendet, werden alle Informationen über das Projekt und die verwendeten Bibliotheken in der pom.xml
-Datei zusammengefasst. Diese Datei kann von Maven verarbeitet werden, um alle benötigten Bibiotheken automatisch runterzuladen.
Im Beispiel oben ist in der pom.xml
die Information enthalten, dass die Chemie-Library benötigt wird:
<dependencies>
<dependency>
<groupId>com.epam.indigo</groupId>
<artifactId>indigo</artifactId>
<version>1.2.3.r0</version>
</dependency>
...
</dependencies>
(und eine weitere für das Anzeigen der Moleküle). Wenn man eine andere Library verwenden will, findet man auf der Webseite dieser Library meistens Informationen, wie die "Maven Koordinaten" sind - das heißt, wie der <dependency>
-Eintrag aussieht, den man in den <dependencies>
hinzufügen muss, damit Maven die Library automatisch findet.
(Man muss das nicht per Hand in der XML-Datei machen. Eclipse bietet da auch eigene Funktionen dafür. Aber tatsächlich ist es per Hand nicht viel aufwändiger...)
In einem kleinen Beispielprogramm soll jetzt die Library verwendet werden, um ein Bild von einem Molekül zu erstellen. Das Beispielprogramm ist von http://ctr.wikia.com/wiki/Depict_a_compound_as_an_image#Indigo.2FJava übernommen.
Anleitung:
- Diesen Quellcode hier als neue Klasse einfügen: (wie das am einfachsten geht, steht unten)
import java.io.IOException;
import com.epam.indigo.Indigo;
import com.epam.indigo.IndigoObject;
import com.epam.indigo.IndigoRenderer;
// From http://ctr.wikia.com/wiki/Depict_a_compound_as_an_image#Indigo.2FJava
public class RenderMoleculeToFile {
public static void main(String[] args) throws IOException {
Indigo indigo = new Indigo();
IndigoRenderer renderer = new IndigoRenderer(indigo);
IndigoObject mol = indigo.loadMolecule("CN1C=NC2=C1C(=O)N(C(=O)N2C)C");
mol.layout();
indigo.setOption("render-output-format", "png");
indigo.setOption("render-comment", "Caffeine");
indigo.setOption("render-comment-position", "top");
indigo.setOption("render-image-size", 200, 250);
indigo.setOption("render-background-color", 1.0f, 1.0f, 1.0f);
renderer.renderToFile(mol, "caffeine.png");
}
}
- Am einfachsten:
- Den Inhalt hier mit der Maus markieren
- STRG+C drücken (zum Kopieren)
- Zu Eclipse wechseln
- Im Project Explorer den Ordner
"src/main/java"
auswählen - STRG+V drücken (um das Kopierte einzufügen - Eclipse erkennt automatisch, dass das eine Klasse ist)
- Das Programm starten. Es wird eine Datei
caffeine.png
erstellt, die ein Koffein-Molekül darstellt. - Im Project-Explorer das "cub"-Projekt auswählen
- F5 drücken
- Im Project-Explorer erscheint unten
caffeine.png
. Diese Datei doppelklicken zum Anzeigen.
Ich hab' keine Ahnung :-)
In der Zeile
IndigoObject mol = indigo.loadMolecule("CN1C=NC2=C1C(=O)N(C(=O)N2C)C");
wird offenbar ein "Molekül"-Objekt Namens mol
erstellt. Danach werden einige Parameter gesetzt, die festlegen, wie das Bild aussehen soll, das erstellt wird. In der letzten Zeile wird dann das Molekül-Objekt mol
in eine Datei gemalt.
Der String, aus dem dieses Molekül erstellt wird, ist offenbar im https://de.wikipedia.org/wiki/Simplified_Molecular_Input_Line_Entry_Specification - Format. Versuche einfach mal, dort einen anderen String einzusetzen, und schau', welches Bild rauskommt.
Auf https://lifescience.opensource.epam.com/indigo/api/index.html gibt es eine ausführliche Dokumentation für die Library, mit vielen kleinen Beispielen. Schau' dir die Beispiele an, und versuche, einige der Funktionen dort zu nutzen. Als Test habe ich eben die Zeile mit loadMolecule
ersetzt durch das hier:
IndigoObject mol = indigo.createMolecule();
IndigoObject atom1 = mol.addAtom("H");
IndigoObject atom2 = mol.addAtom("H");
IndigoObject atom3 = mol.addAtom("O");
IndigoObject bond1 = atom1.addBond(atom3, 1);
IndigoObject bond2 = atom2.addBond(atom3, 1);
und das Bild hat dann ein Wasser-Molekül gezeigt.