„Wir haben Ideen für Maven 4 und sogar für Maven 5“ - ein Interview mit Robert Scholte, einem wichtigen Teilnehmer am Maven-Projekt

Gib es zu, wir haben alle lange Abende und Nächte an Builds in Maven gearbeitet, und in diesem Moment wollte ich wirklich ein paar liebevollen Machern von dieser wunderbaren Technologie erzählen. Manchmal werden Träume wahr! Zhenya und ich ( phillennium ) stießen auf fast den wichtigsten Maven-Entwickler - Robert Scholte. Und was wir ihn gefragt haben ...



Lesen Sie mehr →


Mit dem neuen Veröffentlichungszyklus erscheinen Java-Versionen nacheinander, die elfte ist bereits erschienen, während viele auf der achten sitzen. Sie werden in Kürze einen Vortrag darüber halten, wie Maven all dies unterstützt, und Sie möchten den Bericht nicht verderben, sondern eine Frage in diese Richtung stellen. Was denkst du persönlich über diesen neuen Veröffentlichungszyklus, der dir Arbeit hinzufügt? Ist das eine Veränderung zum Guten oder zum Schlechten?


Wenn Sie über einen 6-monatigen Veröffentlichungszyklus sprechen, ist dies für Maven etwas schnell. Unser Team ist klein genug, wir haben ungefähr 5-10 aktive Teilnehmer und sie sind alle Freiwillige, kein Unternehmen entwickelt Maven. Jeder sollte also in seiner Freizeit an dem Projekt arbeiten. Änderungen in Java verursachen viel Arbeit. Jedes Mal, wenn eine neue Version veröffentlicht wird, müssen wir ihre Unterstützung bereitstellen, was bedeutet, dass wir keine Zeit für Maven, Plugins dafür oder irgendetwas anderes haben. Es wäre besser für mich, wenn der Zyklus anderthalb Jahre lang wäre.




Haben andere Leute, die Projekte für das Java-Ökosystem entwickeln, ein ähnliches Gefühl und müssen auch die neuesten Versionen unterstützen?



Nach Twitter zu urteilen, sind sich die meisten einig, dass 6 Monate zu schnell sind.




Könntest du die Geschichte von Maven erzählen? Wenn ich mich richtig erinnere, wurde es vor langer Zeit erstellt, um den Bau der Apache-Turbine weniger beängstigend und schmerzhaft zu machen. Ich habe übrigens Apache Turbine verwendet. Erinnerst du dich an diese Zeit?


Die Geschichte von Maven begann vor langer Zeit. Ich bin dem Projekt vor ungefähr 8 Jahren beigetreten, dh während der Version 3.0.3 oder 3.0.4. Und zu diesem Zeitpunkt gibt es Maven schon seit einiger Zeit. Soweit ich weiß, war er Teil des Turbinenprojekts. Aus einem Teil dieses Projekts, aus dem Maven wurde, wurde ein separates Werkzeug hergestellt. Ich habe damals, wie wahrscheinlich alles, Ant benutzt. Das gefiel mir nicht jedes Mal, wenn ich anfing, an einem neuen Projekt zu arbeiten, musste ich all diese Ant-Dateien kopieren. Ich wusste, dass es eine bessere Lösung geben sollte, begann im Internet danach zu suchen und fand Maven. Bevor ich jedoch die Hauptidee von Maven verstand, verging viel Zeit. Wenn Sie es jedoch verstehen, wird es bequem. Alle Probleme, die ich mit Ant hatte, verschwanden. Ant ist immer noch ein großartiges Tool, aber wenn Sie an einem Projekt arbeiten, das viele Quellen kombiniert, empfehle ich dringend Maven oder ein ähnliches Tool.




Bei Maven geht es nur um Java. Ich habe versucht, es für C ++ zu verwenden, aber es war nicht sehr schön. Gibt es eine Zeit, in der Java nicht mehr verfügbar sein wird, und was werden wir dann tun?


Von den vorhandenen populären objektorientierten Sprachen scheint Java eine der ältesten zu sein, es ist bereits über 20 Jahre alt. Ich habe mir die neuesten Statistiken nicht angesehen, bin mir aber sicher, dass Java immer noch sehr verbreitet ist. Ich denke, es wird noch einige Zeit existieren. Zumindest hoffe ich das - es bedeutet, dass ich nicht ohne Arbeit bleiben werde.




Wird Maven zu lange leben?


Dies ist jedoch eine schwierige Frage. Bis heute verwenden 65-80% der Java-Projekte Maven. Selbst für ein Produkt, das älter als 15 Jahre ist, ist dies eine Menge. Wahrscheinlich kann in Maven noch viel mehr verbessert werden. Wir haben Ideen für Maven 4 und sogar für Maven 5. Die Implementierung wird jedoch lange dauern. Ich denke, die allgemeine Idee von Maven wird nicht überholt sein, aber andere Montagesysteme könnten sie durchaus überholen. Da sie Erfahrungen sowohl aus den Fehlern, die wir bei Maven gemacht haben, als auch aus den Entscheidungen, die wir richtig getroffen haben, extrahieren und auf dieser Erfahrung basieren, können sie bei Null anfangen. Einer der Vorteile von Maven ist die Abwärtskompatibilität. Sogar ein Projekt, das vor 10 oder 15 Jahren geschrieben wurde, kann mit der neuesten Version von Maven zusammengestellt werden. Aber aus diesem Grund haben wir viel alten Code in Maven Core. Es sollte ersetzt werden, aber das ist nicht so einfach.



Soweit ich mich erinnere, können Sie jetzt noch Moji ohne Anmerkungen erstellen.


Ja das ist möglich




Vor dem Interview habe ich versucht, ein Tutorial dazu zu finden, und nichts gefunden. Es ist, als ob die Langoliers uns nachjagen und alle alten Dokumente im Internet wegfressen. Aber ich erinnere mich, dass es einst keine Anmerkungen gab und spezielle Konventionen verwendet wurden. Nun, lassen Sie uns zu einer anderen Frage übergehen. Glaubst du, Maven hat echte Konkurrenz? Sag Gradle?


Gradle ist ein sehr starker Konkurrent, und das gibt es schon seit geraumer Zeit. Ich glaube, dass Wettbewerb gut ist, weil er uns in Form hält und es uns ermöglicht, alternative Lösungen zu finden. Sie haben nur einen anderen Ansatz, wie man Projekte sammelt, daran ist nichts auszusetzen. Jeder sollte wählen, was am besten zu seinem Projekt passt. Vielleicht sollte ich hier auch Pro erwähnen. Dies ist ein Tool, das von Remi Forax vom ASM-Team (Bytecode-Parser) geschrieben wurde. Er war wie ich Mitglied der Expertengruppe des Jigsaw-Projekts. Er wollte ein Build-Tool schreiben, das die Java-Ideen am besten widerspiegelte. Als er Pro kreierte, lieh er sich die besten Aspekte von Maven aus. Das zu sehen war interessant. Es war eine Demo, die zeigen sollte, dass Sie Java 9-Module und die damit verbundenen Vorteile im Builder verwenden können.




Sie sagten, Sie hätten am Jigsaw-Projekt teilgenommen - und das in der Vergangenheitsform. Er hat aufgehört zu existieren? Hat er noch die Möglichkeit, sich zu entwickeln?


Dieser JSR ist geschlossen. Zwar blieben einige ungelöste Probleme bestehen, aber sie werden jetzt vom Support-Team behandelt.




Was verursachte die größten Schwierigkeiten bei der Entwicklung von Maven? Was waren die schwerwiegendsten Probleme? Nicht in Bezug auf Java 9, sondern im Allgemeinen basierend auf allen Entwicklungserfahrungen. Können Sie beispielsweise die beiden wichtigsten Probleme auswählen?


Die Frage ist nicht einfach, aber versuchen wir es. Der Teil, in dem die Abhängigkeitsauflösung auftritt, ist äußerst komplex. Wir versuchen immer noch, es zu verbessern. Möglicherweise haben Sie bemerkt, dass es keine Maven 3.4-Version gab, nach Version 3.3.9 gab es sofort 3.5.0. Der Hauptgrund dafür ist, dass sich die Auflösung von Abhängigkeiten erheblich geändert hat. Sie wurden als Fehlerbehebungen markiert, aber wir stellten fest, dass eine erhebliche Anzahl von Projekten plötzlich kaputt ging - sie hingen von diesen seltsamen Änderungen ab. Das war inakzeptabel. Daher haben wir das getan, was wir unter keinen anderen Umständen genommen hätten - ein hart zurückgesetztes Git-Repository, und in Maven 3.5.0 haben wir begonnen, nur externe Verbesserungen auszuwählen. Nun, und natürlich haben wir die Konsole mehrfarbig gemacht - es hat allen gefallen.




Ok, jetzt ist es die zweite Schwierigkeit!


Es war nicht einfach für uns, eine Verbindung zur Maven-Community herzustellen und ihnen den richtigen Umgang mit dem Tool beizubringen.




Jeder weiß also, wie man Maven benutzt: Kopieren Sie ein paar XML-Footstraps aus Kommentaren zu Stack Overflow, und es funktioniert. Etwa nicht?


Gut, gut. Nein. Ich bin mir sicher, dass Ihnen meistens empfohlen wird, eine Neuinstallation durchzuführen, und dies ist nicht der Fall. Wahrscheinlich sollte dies in Maven 2 erfolgen. Jetzt müssen Sie mvn verify ausführen. Denn wenn Sie reinigen, wird alles gelöscht, das gesamte Ergebnis der Arbeit. Und wenn Dateien von Ihnen kopiert werden - dies sind E / A-Vorgänge - sind sie langsam. Im Allgemeinen werden viele Dinge um ein Vielfaches erledigt. Die meisten Plugins wissen, wann sie ihre Arbeit erledigen müssen. In der Regel ist keine Reinigung erforderlich. Bei der Installation kopiert dieser Befehl nur Ihre JAR-Dateien in das lokale Repository. Dies ist wiederum eine unnötige E / A-Operation. Darüber hinaus kann Ihr lokales Repository verschmutzt sein - das heißt, es sieht möglicherweise anders aus als das lokale Repository Ihres Kollegen. Manchmal kann dies zu interessanten Ergebnissen führen. Sie sollten also einfach mvn verify ausführen, das ist genug.




Übrigens habe ich gerade maven.apache.org geöffnet und es heißt: „Apache Maven ist ein Tool zum Verwalten und Verstehen von Softwareprojekten“. Aber viele Leute denken, Maven sei nur ein weiteres Build-Tool. Was ist der Unterschied zwischen einem Montagewerkzeug und einem Projektmanagementwerkzeug?


Es ist wahrscheinlich besser, diese Frage nicht zu beantworten - nicht ich habe sie auf der Website geschrieben. Ich denke, der Autor wollte sagen, dass Maven viel mehr ist als nur ein Projekt zu bauen. Er ist auch an der Auflösung von Abhängigkeiten beteiligt, er stellt ein Konfigurationsformat bereit, er erlaubt, nicht zu viele Dinge zu installieren. Im Allgemeinen ist dies eine riesige Sammlung von allem auf der Welt.




Was sind die Hauptprinzipien und Überzeugungen des Maven-Teams? Denken sie zum Beispiel, dass ein deklarativer Ansatz besser ist als ein Imperativ? So etwas wie Zen in Python. Haben Sie ähnliche Regeln?


Ich denke nicht. Unserer Meinung nach sollte die Konfiguration von Plugins so einfach wie möglich gestaltet werden. Wenn angemessene Standardeinstellungen vorhanden sind, sollten diese angegeben werden. Dies erleichtert dem Endbenutzer das Leben. Zum ersten Mal seit vielen Jahren haben wir kürzlich die Standardoption für Quell- und Zielversionen geändert - bevor sie 1,5 war, ist sie jetzt 1,6. Wir wollten, dass die Standardoption vorhanden ist, da ohne sie die im JDK verwendete Version verwendet wird. In diesem Fall haben wir unterschiedliche Ergebnisse, wenn ich Java 10 verwende und jemand anderes Java 12 verwendet. Sie sollten immer Quelle und Ziel angeben. Wenn Sie jedoch mit Java 9 begonnen haben, können Sie Hello World nicht mehr mit einer einfachen POM-Datei und einer Klasse erstellen, da Java 9 mindestens Java 6 für die Quell- und Zielwerte benötigt. Aus diesem Grund haben wir uns für die Standardversion 1.6 entschieden und eine Warnung hinzugefügt, dass dies getan werden sollte, wenn Sie noch keine Version angegeben haben. Die Benutzer sollten wissen, dass Sie entweder die Quell- und Zielversion oder den Release-Wert festlegen müssen, wenn Sie mit Java 9 arbeiten. Oder beides.




Welche Schwierigkeiten sehen Sie für Maven in der Zukunft? Sie sagten, Sie versuchen, Maven nicht zu oft zu wechseln. Und doch, was erwartet uns in Zukunft?


Eine der wichtigsten Änderungen, die wir vornehmen möchten, betrifft die POM-Datei. Wir haben festgestellt, dass es in einigen Abschnitten - insbesondere im Build - hilfreich wäre, einige zusätzliche Elemente hinzuzufügen. Aber im Moment können wir das nicht tun. Die gleiche POM-Datei, die Sie auf Ihrem System verwenden, wird hochgeladen. Wenn Sie andere Elemente hinzufügen, verletzen diese die XSD, und andere Tools können sie nicht verwenden.




Aber können Sie die XSD in der Kopfzeile ändern?


Ja Aber ich denke nicht, dass jedes Tool die XSD überprüft. Sie denken nur, dass sie es mit Version 4.0.0 zu tun haben. Änderungen werden daher sehr schwierig sein. Wir beschlossen, die POM-Datei in mehrere Teile aufzuteilen und mit dem Build POM zu beginnen. Und derjenige, der entladen wird, heißt Consumer POM. Es wird basierend auf dem Build-POM generiert und es sind keine weiteren Maßnahmen erforderlich. Und es wird voll kompatibel mit Maven POM 4.0.0 sein. Durch die Aufteilung des POM in zwei Teile können wir es endlich erheblich verbessern und die Verwendung von Maven vereinfachen. Dies ist eine Änderung im Maven-Kern, an der wir seit mehr als einem Jahr arbeiten, einschließlich der Implementierung in der IDE. Das ist nicht einfach.




Einige IDEs versuchen, Teile von Maven aus Gründen der Integration, der automatischen Vervollständigung, der inkrementellen Kompilierung usw. in die IDE aufzunehmen. Wie mache ich es richtig? Soweit ich mich erinnere, wurden einige Teile von Maven vor langer Zeit in Eclipse gebaut.


Ich denke, dass solche Versuche gerechtfertigt sind - dieses System war aufgrund der Integration für Benutzer sehr praktisch. Möglich wurde dies durch eine der wesentlichen Änderungen, die in Maven 3 implementiert wurden. Darin wurde die Architektur überarbeitet, um eine bessere Unterstützung in der IDE zu bieten. Die Autoren dieser Änderungen arbeiteten eng mit Eclipse zusammen, und diese Lösung kam von hier. Ich halte das für zulässig. Ich weiß, dass NetBeans und InelliJ einen völlig anderen Ansatz verfolgen. Sie rufen Maven einfach ohne Integration über die Befehlszeile auf.




Ein weiteres wichtiges Thema ist die Geschwindigkeit von Maven. Können wir es irgendwie erhöhen? Abhängigkeitsauflösung und E / A-Operationen sind sehr langsam. Noch heute auf einer SSD.


Ja, es kann etwas getan werden. Zuerst müssen Sie sich ansehen, wie viele Kernel sich in Ihrem System befinden, und Maven mit mehreren Threads starten. Dies ist eine der Lösungen. Schauen Sie sich auch Takari an. Dies ist eine Firma, die von Jason van Zayl, einem der Gründer von Maven, gegründet wurde. Er hat einige interessante Erweiterungen geschrieben und die Unterstützung für parallele Baugruppen erheblich verbessert, d. H. Wenn Sie mehrere Projekte erstellen. Ich hoffe, dass er Maven eines Tages diese Entwicklungen mitteilen wird, aber jetzt sollten Sie sich seine Seite ansehen.




Du hast gesagt, du arbeitest in deiner Freizeit an Maven, oder? Hilft die Tatsache, dass Sie einer der Schöpfer von Maven sind, in Ihrem aktuellen Job? Oder ist es nur ein Hobby?


Ich arbeite als Softwarearchitekt in einer Regierungsorganisation in den Niederlanden. So verdiene ich meinen Lebensunterhalt. Natürlich wissen sie, dass ich auch an Maven arbeite, deshalb stellen sie mir regelmäßig Fragen zu Maven. Aber insgesamt bin ich nur ihr Architekt. Und abends arbeite ich an Maven, versuche es zu verbessern, Menschen zu helfen.




Arbeiten Sie neben Maven an anderen Open Source-Projekten?


Ich beteilige mich an zwei anderen Projekten. Eines heißt MojoHaus, es hat einen bedeutenden Teil der Plugins für Maven entwickelt. Zwar mache ich jetzt wenig in diesem Projekt, aber manchmal schaue ich dort hinein und regiere verschiedene kleine Dinge. Ein weiteres Projekt heißt QDox. Es analysiert den Quellcode. Es ist auch mit Maven verbunden, da es in einigen Plugins dafür verwendet wird. Diese Erfahrung hilft mir, da ich beispielsweise im Fall des in Java 9 eingeführten Moduldeskriptors aufgrund der Erfahrung einen Deskriptor in Plugins für Maven verwenden konnte.




Was ist übrigens Ihre Meinung zu Java 9, 10, 11? Soll ich sie verwenden oder ist es besser, bei Java 8 zu bleiben?


Zu neueren Versionen migrieren. Auch wenn Sie nicht alle Funktionen verwenden, sollten Sie ein Upgrade auf Java 10 durchführen oder einige Wochen warten und ein Upgrade auf Java 11 durchführen. Verwenden Sie einfach den Klassenpfad. Java ist dank seiner Modularität deutlich schneller, aber der Klassenpfad funktioniert einfach. Ich weiß, dass viele immer noch denken, dass Sie einen Moduldeskriptor hinzufügen oder ein Modulsystem verwenden müssen, aber dies ist nicht erforderlich. Verwenden Sie einfach classpath.




Kennen Sie das GraalVM-Projekt übrigens? Wie wäre es damit Maven zu bauen?


Letzte Woche habe ich JavaZone besucht und dies mit Chris und Oleg besprochen. Ich denke, wir müssen einige Zeit damit verbringen, um zu sehen, ob es möglich ist, Mavens Leistung mit GraalVM wirklich zu verbessern. Es könnte interessant sein.




Sie sind der Schöpfer von Maven, einem Projekt, das für Java-Entwickler sehr wichtig ist. Was denkst du darüber?


Ich bin nicht der Gründer des Projekts, ich engagiere mich für dessen Unterstützung. Ich fing an, mich mit ihm zu befassen, als er bereits einen langen Weg zurückgelegt hatte, und es scheint, als würde ich ihn akzeptabel verstehen. Vor zehn Jahren hätte ich nicht gedacht, dass ich an der Spitze der Hierarchie landen würde, aber es ist passiert und es ist sehr cool. Jeder hat eine Meinung zu Maven, und ich mag es sehr, wenn Leute zur Konferenz kommen und Leute sagen, dass sie von Maven begeistert sind. Das motiviert mich sehr und gibt mir die Kraft, nach meiner Rückkehr weiter an dem Projekt zu arbeiten.



Viele Entwickler hassen XML vehement. Ich bin keiner von ihnen, aber wenn es darum geht, Systeme zu erstellen, wird dieses Thema aufgrund von pom.xml in Maven immer angezeigt. Deshalb möchte ich wissen: Wie ist Ihre Meinung zu XML?


Das Gute an XML ist, dass jeder es versteht, es einfach zu analysieren ist und eine sehr gute Unterstützung in der IDE bieten kann. Ich bin ganz normal mit XML und soweit ich weiß, hassen nicht mehr als 5% der Maven-Benutzer XML - aber sie schreien laut darüber! Und die restlichen 95% hört man einfach nie. Trotzdem gibt es eine Lösung für diese 5% - auch hier möchte ich Takari erwähnen. Es gibt ein Polyglot-Projekt, mit dem Sie eine andere Syntax auswählen können. Wenn Sie also Yaml und pom.yml verwenden möchten, ist dies durchaus möglich. Sie müssen dem Projekt nur Erweiterungen hinzufügen und können zu einer anderen Sprache wechseln.




Und auch zur Stimmung der Entwickler: Ich erinnere mich an den Thread auf der Maven-Mailingliste, in dem sich der Autor des SDKMAN-Tools befindet! Die Community antwortete auf den Vorschlag, den Maven durch ihn zu verbreiten, mit Sätzen wie „Ich sehe nur ein Projekt mit einem dummen Namen“ und „Sie könnten Ihre Idee besser verkaufen“. Dann kam es zu Diskussionen: Einige glaubten, dass die Community zu aggressiv reagierte, während andere - dass der ursprüngliche Satz „zusätzliche Aktionen in Verbindung mit meinem Tool ausführen“ unbegründet war. Auf die eine oder andere Weise waren viele mit der Situation unzufrieden, und diesbezüglich die Frage: Glauben Sie, dass speziell Maven oder die Open-Source-Community im Allgemeinen Kommunikationsprobleme haben?


Kommunikation kann sehr, sehr schwierig sein, das ist sicher. Besonders wenn es nur durch den Text geschieht und Sie den Gesprächspartner nicht vor sich sehen - in dieser Situation wird es schwierig zu erklären, was Sie sagen möchten. Ich denke, dass jedes Open Source-Projekt mit dem Problem der korrekten Kommunikation mit Menschen konfrontiert ist. Ich verstehe voll und ganz, warum Projektteilnehmer manchmal verärgert sind - sie hören immer wieder dieselben Fragen. Ein Beispiel für eine solche Frage, die ich bereits erwähnt habe: "Warum können Sie mvn clean install nicht verwenden?" Ich habe aufgehört, das zu erklären, weil ich mich sonst in eine unhöfliche Person verwandelt hätte, aber ich will das nicht. Also erkläre ich solche Dinge auf andere Weise. Einerseits kann die Kommunikation sehr schwierig sein. Auf der anderen Seite ist Maven zwar unflexibel, aber Teil seines Erfolgs. Wenn Leute Angebote machen, die nicht mit unserem Maven-Konzept kompatibel sind, sagen wir nur: Entschuldigung, aber das passt aus irgendeinem Grund nicht zu uns. Ich verstehe voll und ganz, dass dies frustrierend sein kann. Im Allgemeinen ist dieser Ansatz jedoch nur das Beste.




Könnten Sie unseren Lesern am Ende ein paar Worte sagen und vorschlagen, wie sie in eine glänzende Zukunft kommen können?


Wie gesagt, ein kleines Team arbeitet an Maven, es ist ein Open-Source-Projekt, an dem jeder teilnehmen kann. Es ist nicht so schwierig. Wir haben ein neues Label erstellt, das zu gewinnen ist. Dies sind Probleme, die nicht zu schwer zu beheben sein sollten. Auf diese Weise können Sie lernen, wie Maven funktioniert. Wenn Sie unserem Team beitreten möchten, sehen wir am Beispiel Ihrer Korrekturen die Qualität Ihres Codes. Wenn Sie von uns bemerkt werden möchten, empfehle ich, es zu versuchen. Ich möchte wirklich, dass unser Team in Zukunft wächst.




Danke für die Antworten. Treffen Sie mich beim Joker 2018!


Minute der Werbung. Die Joker 2018-Konferenz findet vom 19. bis 20. Oktober statt, auf der Robert einen Vortrag über "Apache Maven unterstützt ALL Java" hält. Im Allgemeinen wird es bei Joker viele weitere interessante und bemerkenswerte Berichte geben. Tickets können auf der offiziellen Website der Konferenz gekauft werden.

Source: https://habr.com/ru/post/de424505/


All Articles