Uw Java IDE kiezen

Bijgewerkt: december 2018 .

Elke Java-ontwikkelaar heeft een programmeereditor of IDE nodig die kan helpen bij de grungere delen van het schrijven van Java en het gebruik van klassenbibliotheken en frameworks. Welke editor of IDE het beste bij u past, hangt af van verschillende dingen, waaronder de aard van de projecten in ontwikkeling, uw rol in de organisatie, het proces dat door het ontwikkelteam wordt gebruikt en uw niveau en vaardigheden als programmeur. Bijkomende overwegingen zijn of het team de tools heeft gestandaardiseerd en uw persoonlijke voorkeuren.

De drie IDE's die het meest worden gekozen voor server-side Java-ontwikkeling zijn IntelliJ IDEA, Eclipse en NetBeans. Dit zijn echter niet de enige keuzes, en deze recensie zal ook enkele lichtgewicht IDE's bevatten.

Voor deze verzameling heb ik nieuwe installaties gemaakt van IntelliJ IDEA Ultimate 2018.3, Eclipse IDE 2018-09 voor Java EE Developers en Apache NetBeans (incubatie) IDE 9 op een Mac. Ik heb ook verschillende open source Java-projecten bekeken, zodat ik alle IDE's op dezelfde projecten kon testen.

Over deze update

Deze IDE-recensie werd voor het eerst gepubliceerd in september 2016 en is bijgewerkt in december 2018. In die tussenliggende jaren zijn de Java-taal, API's, het JVM-ecosysteem en sommige frameworks aanzienlijk geëvolueerd. Java EE 8 heeft veel Java-technologiespecificaties geïntroduceerd of bijgewerkt, waaronder JSON-B (JavaScript Object Notation Binding), Java EE Security, Servlet 4.0 en JSF (JavaServer Faces) 2.3 voor het bouwen van server-side gebruikersinterfaces. Java EE 8 was ook de laatste Java Enterprise-release van Oracle: The Eclipse Foundation heeft de leiding genomen over het beheer van de technologie, die het heeft omgedoopt tot Jakarta EE. Ondertussen is JUnit gevorderd naar versie 5, waardoor integraties worden verbroken; IDEA en Eclipse hebben beide native ondersteuning voor JUnit 5, maar op het moment van schrijven doet NetBeans dat niet.

Al deze wijzigingen moeten deel uitmaken van uw evaluatie van een IDE, of dit nu voor algemeen gebruik of voor een bepaald project is.

NetBeans 10 voegt ondersteuning toe voor JUnit 5 en JDK 11

NetBeans 10, uitgebracht in januari 2019, voegt ondersteuning toe voor JDK 11 en JUnit 5.

Basisprincipes: wat u nodig heeft van een Java IDE

Je zou minimaal hopen dat je IDE Java 8 en / of 11 (de LTS-versies), Scala, Groovy, Kotlin en alle andere JVM-talen die je regelmatig gebruikt ondersteunt. Je zou ook willen dat het de belangrijkste applicatieservers en de meest populaire webframeworks ondersteunt, waaronder Spring MVC, JSF, Struts, GWT, Play, Grails en Vaadin. Uw IDE moet compatibel zijn met alle build- en versiebeheersystemen die uw ontwikkelteam gebruikt; voorbeelden zijn onder meer Apache Ant met Ivy, Maven en Gradle, samen met Git, SVN, CVS, Mercurial en Bazaar. Voor extra krediet zou uw IDE in staat moeten zijn om de client- en databaselagen van uw stapel te verwerken en ingesloten JavaScript, TypeScript, HTML, SQL, JavaServer Pages, Hibernate en de Java Persistence API te ondersteunen.

Ten slotte hoop je dat je met je Java IDE je systemen gemakkelijk en gemakkelijk kunt bewerken, bouwen, debuggen en testen. Idealiter heb je niet alleen intelligente codeaanvulling, maar ook refactoring en codestatistieken. Als je in een winkel bent die testgestuurd ontwikkelt, wil je ondersteuning voor je testkaders en stubbing. Als uw groep een ticketsysteem en CI / CD gebruikt, is het het beste als uw IDE verbinding met hen kan maken. Als u implementatie naar en foutopsporing in containers en clouds moet uitvoeren, moet uw IDE u daarbij helpen.

Laten we met dat fundament in gedachten eens kijken naar de kanshebbers.

IntelliJ IDEE

IntelliJ IDEA, de belangrijkste Java IDE in termen van zowel functies als prijs, wordt geleverd in twee edities: de gratis Community-editie en de betaalde Ultimate-editie, die extra functies heeft.

De Community-editie is bedoeld voor JVM- en Android-ontwikkeling. Het ondersteunt Java, Kotlin, Groovy en Scala; Android; Maven, Gradle en SBT; en Git, SVN, Mercurial, CVS en TFS.

De Ultimate-editie, bedoeld voor web- en bedrijfsontwikkeling, ondersteunt Perforce naast de andere versiebeheersystemen; ondersteunt JavaScript en TypeScript; ondersteunt Java EE, Spring, GWT, Vaadin, Play, Grails en andere frameworks; en omvat databasetools en SQL-ondersteuning.

Het idee is dat de commerciële (Ultimate) editie zijn plaats zal verdienen op de desktop van een professional, wat een betaald abonnement rechtvaardigt door een hogere productiviteit van de programmeur. Als u $ 50K- $ 100K per jaar verdient als Java-ontwikkelaar, is er niet veel productiviteitsboost nodig om u een snelle ROI te geven met een zakelijk IDEA-abonnement van $ 500 / jaar. De prijs daalt in de daaropvolgende jaren voor bedrijven, is veel lager voor startups en particulieren, en is gratis voor studenten, docenten, "Java-kampioenen" en open source-ontwikkelaars.

IntelliJ prijst IDEA aan voor diep inzicht in uw code, ontwikkelaarergonomie, ingebouwde ontwikkelaarstools en een polyglot programmeerervaring. Laten we nader bekijken wat deze functies betekenen en hoe ze u kunnen helpen.

Martin Heller

Diep inzicht in uw code

Syntaxiskleuring en eenvoudige codeaanvulling zijn een gegeven voor Java-editors. IDEA gaat verder dan dat om "slimme aanvulling" te bieden, wat betekent dat het een lijst kan laten verschijnen met de meest relevante symbolen die van toepassing zijn in de huidige context. Deze zijn gerangschikt op basis van uw persoonlijke gebruiksfrequentie. "Chain completeren" gaat dieper en toont een lijst met toepasselijke symbolen die  toegankelijk zijn via methoden of getters  in de huidige context. IDEA vult ook statische leden of constanten aan en voegt automatisch alle benodigde importinstructies toe. Bij alle codeaanvullingen probeert IDEA het runtime-symbooltype te raden, zijn keuzes daaruit te verfijnen en indien nodig class-casts toe te voegen.

Java-code bevat vaak andere talen als strings. IDEA kan fragmenten van SQL-, XPath-, HTML-, CSS- en / of JavaScript-code in Java String-literals injecteren. Overigens kan het code over meerdere talen herstructureren; Als u bijvoorbeeld een klasse hernoemt in een JPA-instructie, zal IDEA de bijbehorende entiteitsklasse en JPA-expressies bijwerken.

Wanneer u een stuk code refactoreert, is een van de dingen die u doorgaans wilt doen, ook alle duplicaten van die code refactoren. IDEA Ultimate kan duplicaten en vergelijkbare fragmenten detecteren en de refactoring ook daarop toepassen.

IntelliJ IDEA analyseert uw code wanneer deze wordt geladen en wanneer u typt. Het biedt inspecties om mogelijke problemen aan te wijzen en, indien u dat wenst, een lijst met snelle oplossingen voor het gedetecteerde probleem.

Ergonomie van ontwikkelaars

IntelliJ ontwierp IDEA met de creatieve flow van de ontwikkelaar - ook wel  'in de zone zijn' genoemd - in gedachten. Het Projecttoolvenster dat links in Figuur 1 wordt getoond, verdwijnt met een simpele muisklik uit beeld, zodat u zich kunt concentreren op de code-editor. Alles wat u tijdens het bewerken wilt doen, heeft een sneltoets, inclusief het weergeven van symbooldefinities in een pop-upvenster. Hoewel het leren van de shortcuts tijd en oefening kost, worden ze uiteindelijk een tweede natuur. Zelfs zonder de snelkoppelingen te kennen, kan een ontwikkelaar IDEA gemakkelijk en snel leren gebruiken.

Het ontwerp van de IDEA-debugger is bijzonder mooi. Variabele waarden verschijnen direct in het editorvenster, naast de bijbehorende broncode. Wanneer de toestand van een variabele verandert, verandert ook de oplichtende kleur.

Ingebouwde ontwikkelaarstools

IntelliJ IDEA biedt een uniforme interface voor de meeste belangrijke versiebeheersystemen, waaronder Git, SVN, Mercurial, CVS, Perforce en TFS. U kunt al uw verandermanagement rechtstreeks in de IO doen. Terwijl ik IDEA testte, wenste ik dat de laatste wijziging in een broncodeblok als een annotatie in het editorvenster zou verschijnen (zoals in Visual Studio). Het blijkt dat daar een plug-in voor is.

IDEA integreert ook buildtools, testrunners en dekkingstools, evenals een ingebouwd terminalvenster. IntelliJ heeft geen eigen profiler, maar ondersteunt verschillende externe profilers via plug-ins. Deze omvatten YourKit, gemaakt door een voormalige hoofdontwikkelaar van IntelliJ, en VisualVM, een herverpakte versie van de NetBeans-profiler.

Debuggen van Java kan lastig zijn als er mysterieuze dingen gebeuren in klassen waarvoor u geen broncode heeft. IDEA wordt voor die gevallen geleverd met een decompiler.

Bij het programmeren van Java-servers wordt vaak met databases gewerkt, dus IDEA Ultimate bevat SQL- en NoSQL-databasetools. Als je meer nodig hebt, is er een speciale SQL IDE (DataGrip) beschikbaar als onderdeel van een abonnement voor alle producten dat maar een beetje duurder is dan een IDEA Ultimate-abonnement.

IntelliJ IDEA ondersteunt alle belangrijke JVM-applicatieservers en kan worden geïmplementeerd op en debuggen op de servers, waardoor een groot pijnpunt voor Enterprise Java-ontwikkelaars wordt verholpen. IDEA ondersteunt ook Docker via een plug-in die een Docker-toolvenster toevoegt. (Over plug-ins gesproken, IntelliJ heeft er veel.)

Polyglot programmeren

IDEA heeft uitgebreide codeerassistentie voor Spring, Java EE, Grails, Play, Android, GWT, Vaadin, Thymeleaf, Android, React, AngularJS en andere frameworks. Dit zijn niet allemaal Java-frameworks. Naast Java begrijpt IDEA veel andere talen, waaronder Groovy, Kotlin, Scala, JavaScript, TypeScript en SQL. Als je meer nodig hebt, zijn er momenteel honderden IntelliJ-taalplug-ins, inclusief plug-ins voor R, Elm, Go, Rust en D.

Eclipse IDE

Eclipse, lang de meest populaire Java IDE, is gratis en open source en is voornamelijk geschreven in Java, hoewel de plug-in-architectuur ervoor zorgt dat Eclipse kan worden uitgebreid in andere talen. Eclipse is in 2001 ontstaan ​​als een IBM-project om de Smalltalk-gebaseerde IBM Visual Age-familie van IDE's te vervangen door een draagbare op Java gebaseerde IDE. Een doel van het project was om Microsoft Visual Studio te verduisteren, vandaar de naam.

Dankzij de draagbaarheid van Java is Eclipse platformonafhankelijk: Eclipse draait op Linux, Mac OS X, Solaris en Windows. De Java Standard Widget Toolkit (SWT) is op zijn minst gedeeltelijk verantwoordelijk voor het uiterlijk van Eclipse, voor goed of slecht. Evenzo dankt Eclipse zijn prestaties (of, volgens sommigen, het gebrek daaraan) aan de JVM. Eclipse heeft de reputatie langzaam te werken, wat teruggrijpt op oudere hardware en oudere JVM's. Zelfs vandaag de dag kan het echter traag aanvoelen, vooral wanneer het zichzelf op de achtergrond bijwerkt met veel geïnstalleerde plug-ins.

Een deel van de overhead in Eclipse is de ingebouwde incrementele compiler, die wordt uitgevoerd wanneer het een bestand laadt en wanneer u uw code bijwerkt. Dit is per saldo een zeer goede zaak, en geeft foutindicatoren terwijl u typt.

Onafhankelijk van het buildsysteem houdt een Eclipse Java-project ook een model van de inhoud bij, dat informatie bevat over de typehiërarchie, verwijzingen en declaraties van Java-elementen. Dit is ook per saldo een goede zaak, en maakt verschillende bewerkings- en navigatie-assistenten mogelijk, evenals de overzichtsweergave.

De huidige versie van Eclipse is 2018‑09. Ik heb de Eclipse IDE voor Java EE-ontwikkelaars geïnstalleerd, maar er zijn veel andere installatiepakketten, waaronder de optie om de minimale Eclipse SDK te installeren en plug-ins alleen toe te voegen als dat nodig is. De laatste optie is echter niet voor bangeriken: het is niet moeilijk om conflicten te introduceren tussen plug-ins die niet echt  zeiden dat  ze incompatibel waren.

Martin Heller

Ondersteuning voor uitbreidbare tools

Het plug-in-ecosysteem is een van de sterke punten van Eclipse, maar ook een bron van incidentele frustratie. De Eclipse-marktplaats bevat momenteel meer dan 1600 oplossingen, en door de gemeenschap bijgedragen plug-ins werken mogelijk niet zoals geadverteerd. Toch bieden Eclipse-plug-ins ondersteuning voor meer dan 100 programmeertalen en bijna 200 frameworks voor applicatie-ontwikkeling.

De meeste Java-servers worden ook ondersteund: als u een nieuwe serververbinding definieert vanuit Eclipse, komt u bij een lijst met leveranciersmappen, waaronder u ongeveer 30 applicatieservers vindt, waaronder negen versies van Apache Tomcat. De commerciële leveranciers hebben de neiging om hun aanbod op één hoop te gooien: er is bijvoorbeeld maar één item onder Red Hat JBoss Middleware, waaronder WildFly en EAP Server Tools, evenals JBoss AS.

Bewerken, bladeren, refactoring en foutopsporing

De eerste ervaring van een ontwikkelaar met Eclipse kan verontrustend en zelfs verwarrend zijn. Dit komt omdat je eerste taak is om je aan te passen aan Eclipse's conceptuele architectuur van werkruimten, perspectieven en weergaven, waarvan de functies worden bepaald door de plug-ins die je hebt geïnstalleerd. Voor Java-serverontwikkeling gebruikt u bijvoorbeeld waarschijnlijk de Java-, Java EE- en Java-browse-perspectieven; de pakketverkenner; het debug-perspectief; een teamsynchronisatieperspectief; webtools; een perspectief van database-ontwikkeling; en een database-debugging-perspectief. In de praktijk zullen deze allemaal logisch worden zodra u de weergaven opent die u nodig hebt.

Er is vaak meer dan één manier om een ​​bepaalde taak in Eclipse uit te voeren. U kunt bijvoorbeeld door code bladeren met de projectverkenner en / of het Java-bladerperspectief; welke je kiest, is een kwestie van smaak en ervaring.

Met Java-zoekondersteuning kunt u declaraties, verwijzingen en exemplaren van Java-pakketten, -typen, -methoden en -velden vinden. U kunt ook Snelle toegang gebruiken om te zoeken, en snelle weergaven gebruiken om dingen zoals lesoverzichten weer te geven.