Eclipse, artımlı yapılar konseptine sahiptir. Bu, çok fazla zaman kazandırdığı için inanılmaz derecede yararlıdır.
Bu Nasıl Yararlı?
Az önce tek bir .java dosyasını değiştirdiğinizi varsayalım. Artımlı kurucular, her şeyi yeniden derlemek zorunda kalmadan kodu derleyebilecekler (bu daha fazla zaman alacaktır).
Şimdi Maven Eklentilerindeki sorun nedir
Maven eklentilerinin çoğu artımlı yapılar için tasarlanmamıştır ve bu nedenle m2e için sorun yaratır. m2e, eklenti hedefinin çok önemli mi yoksa alakasız mı olduğunu bilmez. Tek bir dosya değiştiğinde her eklentiyi çalıştırırsa, çok zaman alacaktır.
M2e'nin yürütmenin nasıl ele alınması gerektiğini anlamak için meta veri bilgilerine güvenmesinin nedeni budur. m2e, bu üst veri bilgisini sağlamak için farklı seçenekler geliştirmiştir ve tercih sırası aşağıdaki gibidir (en yüksekten en düşüğe)
- projenin pom.xml dosyası
- ebeveyn, büyük ebeveyn ve benzeri pom.xml dosyaları
- [m2e 1.2+] çalışma alanı tercihleri
- kurulu m2e uzantıları
- maven eklentisi tarafından sağlanan [m2e 1.1+] yaşam döngüsü eşleme meta verileri
- m2e ile gönderilen varsayılan yaşam döngüsü haritalama meta verileri
1,2, pom dosyanızın veya üst öğelerinden herhangi birinin etiketinde pluginManagement bölümünü belirtmeyi ifade eder. M2E, projeyi yapılandırmak için bu yapılandırmayı okur . Snippet'in altında m2e'ye yuicompressor-maven-eklentisinin jslint
ve compress
hedeflerini yok sayması talimatını verir.
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
3) Pom dosyanızı bu meta verilerle kirletmeyi tercih etmiyorsanız, bunu harici bir XML dosyasında saklayabilirsiniz (seçenek 3). Aşağıda m2e'ye yuicompressor-maven-eklentisinin jslint
ve compress
hedeflerini göz ardı etmesini söyleyen örnek bir eşleme dosyası bulunmaktadır.
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<versionRange>[1.0,)</versionRange>
<goals>
<goal>compress</goal>
<goal>jslint</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore/>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
4) Bu 3 seçenekten hiçbirini beğenmezseniz, maven eklentisi için bir m2e konektörü (uzantısı) kullanabilirsiniz. Konektör, meta verileri m2e'ye sağlayacaktır. Bu bağlantıda bir bağlayıcı içindeki meta veri bilgilerinin bir örneğini görebilirsiniz . Meta verilerin bir yapılandırıcıya atıfta bulunduğunu fark etmiş olabilirsiniz. Bu basitçe, m2e'nin sorumluluğu uzantı yazarı tarafından sağlanan belirli java sınıfına devredeceği anlamına gelir. Yapılandırıcı, projeyi yapılandırabilir (örneğin, ek kaynak klasörleri eklemek vb.) Ve artımlı bir derleme sırasında gerçek maven eklentisinin çalıştırılıp çalıştırılmayacağına karar verebilir (eğer Yapılandırıcı içinde düzgün şekilde yönetilmezse, sonsuz proje oluşumlarına yol açabilir)
Yapılandırıcı (bir örnek için bu bağlantıları bakınız link1 , bağlantı2 ). Dolayısıyla, eklentinin harici bir bağlayıcıyla yönetilebilen bir şey olması durumunda, onu kurabilirsiniz. m2e, diğer geliştiriciler tarafından sağlanan bu tür bağlayıcıların bir listesini tutar. Bu, keşif kataloğu olarak bilinir. m2e, seçeneklerden herhangi biri (1-6) aracılığıyla yürütme için yaşam döngüsü eşleme meta verisine sahip değilseniz ve keşif kataloğunun yürütmeyi yönetebilecek bir uzantı varsa, bir bağlayıcı kurmanızı ister.
Aşağıdaki görüntü, m2e'nin sizden build-helper-maven-eklentisi için bağlayıcıyı kurmanızı nasıl istediğini gösterir.
.
5) M2E yazarlar var eklentisi, kullanıcıların herhangi bir ek yaşam döngüsü eşleştirmeleri veya connectors.Some kullanmak zorunda olmayacak anlamına gelir maven-eklentisi düzenli, kendini içinde artan yapı ve tedarik yaşam döngüsü eşleme desteklemek için eklenti yazarları teşvik zaten bu uygulamaya
6) Varsayılan olarak m2e, maven-compiler-eklentisi ve diğerleri gibi yaygın olarak kullanılan eklentilerin çoğu için yaşam döngüsü eşleme meta verilerini tutar.
Şimdi soruya geri dönelim: Muhtemelen sizin için sorun yaratan belirli hedef için 1, 2 veya 3'te göz ardı edilen bir yaşam döngüsü haritası sunabilirsiniz.