2017-04-04 1 views
10

Die module declaration definiert unter anderem die Abhängigkeiten eines Moduls. Wenn ich Maven als Build-Tool verwende, ist dies überflüssig, da die pom.xml diese (und weitere) Informationen bereits enthält. Basierend darauf, konnte Maven nicht die module-info.java für mich erzeugen?Can Maven erzeugt die Moduldeklaration

+2

Ich glaube nicht, dass es aus einem einfachen Grund kann: innerhalb einer einzigen Abhängigkeit kann ich bereits mehrere Java-Module haben (die nicht selbst Abhängigkeiten sind), also wie hat Maven möglicherweise diese Informationen? – john16384

+3

Die Moduldeklaration ist nicht redundant ... was entspricht "exports ..." in der Pom-Datei? Außerdem benötigt die 'java.sql' wie sollte Maven davon wissen? Was ist mit dem Modulnamen? Basierend auf was soll es erraten werden? ArtefaktId? Wird nicht funktionieren .... Ich empfehle die Maven DEV Liste über das Jigsaw Schlüsselwort zu lesen ... Abgesehen davon, was ist mit transitiven Abhängigkeiten? – khmarbaise

Antwort

6

Man könnte erwarten, dass die meisten Abhängigkeiten tatsächlich auch Module sind. Anforderungen können jedoch auch auf Module des JDK/JRE verweisen, die nicht in der pom.xml spezifiziert sind. Wenn Sie also nur die Abhängigkeiten betrachten, könnten wahrscheinlich die meisten von ihnen in eine erforderliche Modulreferenz umgewandelt werden.

Aber ein Modul-Deskriptor enthält viel mehr Informationen, die alle auf Entscheidungen beruhen, die vom Entwickler getroffen werden müssen. Ich habe geschrieben an article darüber, die im Detail beschreibt, warum es nicht möglich ist, diese Datei vollständig zu generieren.

+2

aber wahrscheinlich könnte es eine Art von Standard-oder Minimum-Modul-Deklaration generieren. Alle zusätzlichen Informationen (vom Entwickler getroffene Entscheidungen) können über den POM (Konfiguration in einem Plugin) bereitgestellt werden. Damit bleibt der Pom die einzige Konfigurationsdatei, die beibehalten wird ?! Es gibt auch Plugins, die bnd-Dateien, Manifest-Dateien oder web.xml-Dateien generieren, die Informationen enthalten, die mit dem Pom angegeben wurden. – dermoritz

+2

In der Tat kann 'jdeps' (in' jdk-9/bin') einen initialen Deskriptor basierend auf dem kompilierten Code erzeugen. Aber es kann nicht Teil des Lebenszyklus werden, weil es von Hand angepasst werden muss. –

Verwandte Themen