{"id":298,"date":"2015-07-25T11:43:58","date_gmt":"2015-07-25T09:43:58","guid":{"rendered":"http:\/\/staratnight.de\/blog\/?p=298"},"modified":"2018-12-02T16:42:12","modified_gmt":"2018-12-02T14:42:12","slug":"composer-in-intellij-verwenden","status":"publish","type":"post","link":"https:\/\/staratnight.de\/blog\/composer-in-intellij-verwenden\/","title":{"rendered":"Composer in IntelliJ verwenden"},"content":{"rendered":"<p><a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener\"><em>Composer<\/em> <\/a>ist ein Werkzeug um Abh\u00e4ngigkeiten in PHP verwalten zu k\u00f6nnen (Dependency Management). Damit ist es m\u00f6glich, PHP-Bibliotheken anzugeben, die von unserem Projekt verwendet wird. <em>Composer <\/em>k\u00fcmmert sich dann darum, dass die Bibliothek mit allen weiteren (transitiven) Abh\u00e4ngigkeiten installiert und aktualisiert wird, falls erforderlich. Vergleichbar ist es mit <a href=\"https:\/\/www.npmjs.com\/\" target=\"_blank\" rel=\"noopener\">npm <\/a>f\u00fcr JavaScript, <a href=\"https:\/\/maven.apache.org\/index.html\" target=\"_blank\" rel=\"noopener\">Maven <\/a>f\u00fcr Java (zumindest der Dependency-Anteil) oder <a href=\"http:\/\/invidit.de\/blog\/nuget-im-visual-studio\/\" target=\"_blank\" rel=\"noopener\">nuget<\/a> f\u00fcr .net.<\/p>\n<p>&nbsp;<\/p>\n<h1>Composer installieren und einrichten<\/h1>\n<p>Wie Composer f\u00fcr die PHP-Entwicklung und die Verwendung in IntelliJ eingerichtet wird, habe ich im Artikel <a href=\"http:\/\/staratnight.de\/blog\/entwicklungsumgebung-fuer-php-unter-windows-einrichten\/\" target=\"_blank\" rel=\"noopener\">Entwicklungsumgebung f\u00fcr PHP unter Windows einrichten<\/a> beschrieben.<\/p>\n<p><!--more--><\/p>\n<h1>Composer manuell verwenden<\/h1>\n<p>Da ich IntelliJ f\u00fcr die PHP-Entwicklung verwende, beschreibe ich hier auch nur, wie <em>Composer<\/em> in IntelliJ 14.x verwendet wird. Composer kann auch \u00fcber die Kommandozeile aufgerufen werden. Wie das funktioniert, ist auf der <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md\" target=\"_blank\" rel=\"noopener\">Composer-Homepage<\/a> beschrieben.<\/p>\n<p>&nbsp;<\/p>\n<h1>Composer in IntelliJ f\u00fcr das Projekt einrichten<\/h1>\n<p>Wenn wir eine neue Bibliothek hinzuf\u00fcgen m\u00f6chten, die wir in unserem Projekt verwenden wollen, ist dies ganz einfach m\u00f6glich.<\/p>\n<p>Haben wir bislang noch keine Abh\u00e4ngigkeit in unserem Projekt, m\u00fcssen wir Composer zun\u00e4chst initialisieren. Dazu rufen wir im Project-Toolwindow auf dem Projekt das Kontextmen\u00fc auf und w\u00e4hlen <em>Composer -&gt; Init Composer&#8230;<\/em><\/p>\n<p>Im folgenden Dialog w\u00e4hlen wir die PHP-Installation aus, die wir f\u00fcr unser Projekt verwenden m\u00f6chten und geben den Pfad zur phar-Datei von <em>Composer<\/em> an.<\/p>\n<p>Daraufhin erstellt IntelliJ uns eine Datei namens <em>composer.json<\/em> und \u00f6ffnet sie direkt zur Bearbeitung. In dieser Datei werden alle Abh\u00e4ngigkeiten verwaltet (\u00e4hnlich der pom.xml bei Maven).<\/p>\n<p>Wir geben hier den Namen unseres Projekts und eine Beschreibung an. Zus\u00e4tzlich kann noch eine Lizenz gew\u00e4hlt und die Autoren angegeben werden. Das ist insbesondere dann wichtig, wenn wir unser Projekt selbst wieder f\u00fcr die Verwendung mit <em>Composer<\/em> ver\u00f6ffentlichen wollen.<\/p>\n<p>Nun k\u00f6nnen wir <em>Composer<\/em> verwenden.<\/p>\n<p>&nbsp;<\/p>\n<h2>Composer in IntelliJ verwenden<\/h2>\n<p>Um eine Abh\u00e4ngigkeit zu unserem Projekt hinzuzuf\u00fcgen rufen wir erneut das Kontextmen\u00fc auf dem Projekt auf und w\u00e4hlen <em>Composer -&gt; Add Dependency&#8230;<\/em><\/p>\n<p>Es \u00f6ffnet sich ein Dialog, in dem wir nach allen zur Verf\u00fcgung stehenden Bibliotheken suchen k\u00f6nnen. Haben wir die gew\u00fcnschte Bibliothek gefunden, k\u00f6nnen wir noch die Version ausw\u00e4hlen.<\/p>\n<p><strong>Wichtig: <\/strong>Es wird hier immer die aktuelle Version vorbelegt. Das kann unter Umst\u00e4nden eine Development-Version sein, was sich f\u00fcr produktive Projekte nicht immer anbietet. Hier also eine entsprechende stable-Version w\u00e4hlen.<\/p>\n<p>Nach einem Klick auf den Button <em>Install<\/em> wird die Bibliothek installiert.<\/p>\n<p><strong>Hinweis:<\/strong> Bei mir dauert die Installation mitunter sehr lange (mehrere Minuten). Falls es also anscheinend ewig dauert, habt ein wenig Geduld, das wird schon&#8230;<\/p>\n<p>&nbsp;<\/p>\n<h1>Voraussetzungen von Bibliotheken<\/h1>\n<p><em>Composer<\/em> sorgt daf\u00fcr, dass transitive Abh\u00e4ngigkeiten der Bibliotheken aufgel\u00f6st werden. Nehmen wir mal als Beispiel <em>phpunit:<\/em><\/p>\n<p>Die Bibliothek ben\u00f6tigt als Abh\u00e4ngigkeit <em>symfony\/yaml<\/em>. <em>Composer<\/em> sorgt daf\u00fcr, dass diese ebenfalls heruntergeladen und in unserem Projekt installiert wird.<\/p>\n<p>Zus\u00e4tzlich pr\u00fcft Composer aber auch weitere Abh\u00e4ngigkeiten, die es nicht durch herunterladen weiterer Bibliotheken l\u00f6sen kann. Da m\u00fcssen wir selbst Hand anlegen. Folgende F\u00e4lle k\u00f6nnen auftreten:<\/p>\n<ul>\n<li>Vorausgesetzte PHP-Version passt nicht zu unserem Projekt<br \/>\n<em>phpunit<\/em> in der Version <strong>4.7.6 <\/strong>ben\u00f6tigt z.B. PHP in einer Version &gt;=5.3.3. Nutzen wir in unserem Projekt z.B. PHP 5.2 kommt es zu einer entsprechenden Fehlermeldung<\/li>\n<li>PHP-Erweiterungen sind nicht aktiviert<br \/>\nDamit wir <em>phpunit<\/em> verwenden k\u00f6nnen brauchen wir zus\u00e4tzlich einige aktive Extensions. Etwa ext-dom oder ext-json. Ist eine dieser Erweiterungen nicht im enthalten oder in unserer php.ini-Datei aktiv, m\u00fcssen wir diese erst aktivieren, bevor wir die Bibliothek installieren k\u00f6nnen. Auch hier zeigt IntelliJ eine entsprechenden Fehlermeldung an.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Struktur von Bibliotheken<\/h1>\n<p>Nachdem <em>Composer<\/em> die Bibliothek installiert hat, haben wir in unserem Projekt folgende neue Elemente:<\/p>\n<ul>\n<li>Den Ordner <em>vendor<\/em>\n<ul>\n<li><em>bin<\/em><br \/>\nHier werden direkt aufrufbare Tools abgelegt, falls die Bibliothek f\u00fcr die Entwicklung gedacht ist. Hier liegt z.B. eine Batch-Datei f\u00fcr <em>phpunit<\/em>.<\/li>\n<li><em>[Name der Bibliothek]<br \/>\n<\/em>Hier werden die Bibliotheken abgelegt, die wir installiert haben,sowie alle transitiv abh\u00e4ngigen Bibliotheken.<\/li>\n<\/ul>\n<\/li>\n<li>Die Datei <em>composer.lock<br \/>\n<\/em>Hier werden die konkreten Versionen der von unserem Projekt verwendeten Bibliotheken und deren Abh\u00e4ngigkeiten festgeschrieben. Dadurch ist sichergestellt, dass wir eine wiederherstellbare Umgebung aus dem Source-Code aufbauen k\u00f6nnen.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Verwendung von Versionskontrollsystemen<\/h2>\n<p>Wird ein VCS verwendet (etwa SVN oder Git), so m\u00fcssen nur die folgenden Dateien eingecheckt werden:<\/p>\n<ul>\n<li><em>composer.json<\/em><\/li>\n<li><em>composer.lock<\/em><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Alle anderen Dateien, also die Bibliotheken, werden durch den Aufruf von <em>composer install <\/em>lokal installiert. IntelliJ k\u00fcmmert sich sogar vollautomatisch darum.<\/p>\n<p>&nbsp;<\/p>\n<p>Auf diesem Weg kann man sehr schnell und einfach neue Bibliotheken zu einem Projekt hinzuf\u00fcgen. Da <em>Composer<\/em> auch noch einen eigenen <a href=\"http:\/\/staratnight.de\/blog\/autoload-in-php\/\" target=\"_blank\" rel=\"noopener\">AutoLoader<\/a> mitbringt, ist die Verwendung ein Kinderspiel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Composer ist ein Werkzeug um Abh\u00e4ngigkeiten in PHP verwalten zu k\u00f6nnen (Dependency Management). Damit ist es m\u00f6glich, PHP-Bibliotheken anzugeben, die von unserem Projekt&hellip;<\/p>\n","protected":false},"author":1,"featured_media":437,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,14,9],"tags":[20,22,21,19],"class_list":["post-298","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-intellij","category-php","category-tools","tag-composer","tag-dependency-management","tag-intellij","tag-php"],"_links":{"self":[{"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/posts\/298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/comments?post=298"}],"version-history":[{"count":3,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/posts\/298\/revisions"}],"predecessor-version":[{"id":438,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/posts\/298\/revisions\/438"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/media\/437"}],"wp:attachment":[{"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/media?parent=298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/categories?post=298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/staratnight.de\/blog\/wp-json\/wp\/v2\/tags?post=298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}