Yanıtlar:
Hem eklentiler hem de bağımlılıklar Jar dosyalarıdır.
Ancak aralarındaki fark, maven'deki işin çoğunun eklentiler kullanılarak yapılmasıdır; oysa bağımlılık, görevleri yürütürken sınıf yoluna eklenecek bir Jar dosyasıdır.
Örneğin, java dosyalarını derlemek için bir derleyici eklentisi kullanırsınız. Derleyici eklentisini bir bağımlılık olarak kullanamazsınız çünkü bu sadece eklentiyi sınıf yoluna ekler ve herhangi bir derlemeyi tetiklemez. Dosyayı derlerken sınıf yoluna eklenecek Jar dosyaları, bağımlılık olarak belirtilecektir.
Aynı senaryonuz için de geçerli. Bazı yay çalıştırılabilir dosyalarını çalıştırmak için yay eklentisi kullanmanız gerekir [yay eklentilerinin ne için kullanıldığından emin değilim. Burada sadece bir tahmin yapıyorum]. Ancak bu yürütülebilir dosyaları yürütmek için bağımlılıklara ihtiyacınız var. Ve Junit, birim testlerini yürütmek için surefire-eklentisi tarafından kullanıldığından bağımlılık altında etiketlenir.
Bu nedenle, eklentinin görevi yürüten bir Jar dosyası olduğunu ve bağımlılığın, görevi yürütmek için sınıf dosyalarını sağlayan bir Jar olduğunu söyleyebiliriz.
Umarım sorunuzu yanıtlar!
Maven'in kendisi, farklı görevleri yerine getirmek için kullanılabilecek birçok farklı birimi olan mutfak robotu olarak tanımlanabilir. Bu birimlere eklenti denir. Örneğin, projenizi derlemek için maven kullanır maven-compiler-plugin
, testleri çalıştırır maven-surefire-plugin
ve benzeri.
Maven açısından bağımlılık, projenizin bağlı olduğu paketlenmiş bir sınıf parçasıdır. Jar, war vb. Olabilir. Örneğin, JUnit testi yazabilmek istiyorsanız, JUnit açıklamalarını ve sınıflarını kullanmanız gerekir, bu nedenle projenizin JUnit'e bağlı olduğunu bildirmeniz gerekir.
Eklentiler ve bağımlılıklar çok farklı şeylerdir ve bunlar tamamlayıcıdır.
Eklentiler, bir Maven derlemesi için görevler gerçekleştirir. Bunlar uygulamada paketlenmemiştir.
Bunlar Maven'in kalbidir.
Maven tarafından yürütülen herhangi bir görev eklentiler tarafından gerçekleştirilir .
: İki eklentileri kategorisi vardır ve eklentileri :build
reporting
<build/>
ve POM'dan öğede yapılandırılmalıdır .<reporting/
ve POM'daki> öğesinde yapılandırılmalıdır . Komut satırında belirtilen maven hedefine göre (örneğin mvn clean
, mvn clean package
veya mvn site
), belirli bir yaşam tarzı kullanılacak ve belirli bir dizi eklenti hedefi yürütülecektir.
Orada yerleşik yapı yaşam çevrimleri üç şunlardır: default
, clean
ve site
. Yaşam default
döngüsü proje dağıtımınızı, clean
yaşam döngüsü proje temizliğini gerçekleştirirken site
yaşam döngüsü de projenizin site belgelerinin oluşturulmasını yönetir.
Bir eklenti hedefi, belirli bir yaşam süresinin belirli bir aşamasına bağlı olabilir.
Örneğin maven-compiler-plugin
, varsayılan olarak bağlandığı compile
yaşam döngüsü fazına hedef: compile
.
Maven eklentilerinin çoğu (hem temel eklentiler hem de üçüncü taraf eklentiler), yapılandırmaya göre kuralları tercih eder. Bu nedenle bunlar, kullanımlarını daha basit hale getirmek için genellikle bir eklenti hedefini belirli bir aşamaya bağlar.
Bu daha temiz ve daha az hataya meyillidir:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
şundan:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
Bağımlılıklar, Maven derlemesi sırasında sınıf yolunda gerekli olan Maven yapıları / bileşenleridir.
Bunlar uygulamada paketlenmiş olabilir, ancak zorunlu değildir (aşağıya scope
bakın).
Bağımlılıkların çoğu jar ancak bunlar başka türden arşivler de olabilir: savaş, kulak, test kavanozu, ejb-müşteri ... veya yine de POM veya BOM.
Bir pom.xml'de, bağımlılıklar birden çok yerde belirtilebilir: bir bildirimde<build><dependencies>
parça, dependencies management
parça veya hareketsizlik ! Aslında bazı eklentilerin yürütülürken sınıf yolunda bazı bağımlılıklara sahip olması gerekebilir. Bu yaygın değildir ama bu olabilir.
İşte bunu gösteren ve birlikte çalışabilecek belgelerden bir örnek : plugin
plugin
dependency
Örneğin, Maven Antrun Plugin sürüm 1.2 Ant sürüm 1.6.5'i kullanıyor, bu eklentiyi çalıştırırken en son Ant sürümünü kullanmak istiyorsanız
<dependencies>
, aşağıdaki gibi öğeler eklemeniz gerekir :
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
...
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-launcher</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
...
</project>
Maven olarak, bağımlılıkları belirli bir biçimde başvurulan:
groupId:artifactId:packaging:classifier:version
.
Sınıflandırıcı (bu isteğe bağlıdır) ve paketleme ( JAR
varsayılan olarak) yaygın olarak belirtilmemiştir. Yani ortak biçim dependency
bildiriminde oldukça geçerli: groupId:artifactId:version
.
İşte <build><dependencies>
bölümde açıklanan bir bağımlılık örneği :
<build>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.14.Final</version>
</dependency>
<dependencies>
</build>
Bir eklentinin aksine, bağımlılığın bir kapsamı vardır.
Varsayılan kapsam compile
. Bu, en sık ihtiyaç duyulan kapsamdır (yeniden yapılandırma yerine kongre). Kapsam bağımlılık bir projenin tüm Sınıf yollarıyla mevcut olduğu anlamına gelir. compile
Kapsam, bağımlılığın hangi sınıf yollarına eklenmesi gerektiğini tanımlar. Örneğin, buna derleme ve çalışma zamanında mı yoksa yalnızca testlerin derlenmesi ve çalıştırılması için mi ihtiyacımız var?
Örneğin daha önce bir şekilde Hibernate tanımlanan compile
her yerde ihtiyaç olarak bağımlılık: öylesine için kaynak derleme test derleme, çalışma zamanını ve ....
Ama biz o test kütüphaneleri uygulamasında paketlenmiş veya kaynak kodunda başvurulan olabilir istemiyoruz . Bu yüzden onlar için test
kapsamı belirliyoruz:
<build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<dependencies>
</build>
webdriver-ie
iki seçeneğim var ya da dahil etmeye çalıştığımda bir maven projesi oluşturdum . plugins
veya dependency
, karşılaştırmak için her ikisini de dahil ettim ve her ikisinin de tamamen aynı olduğunu gözlemledim groupId
, tek fark, plugins
belirli bir sürümle dependency
gelmemesi ve birlikte gelmesiydi 0.6.685
. Bunu meslekten olmayan kişilerle (bu örnekle ilgili olarak) farkın ne olduğunu, hangisinin ne zaman kullanılacağını açıklayabilir misiniz? Herhangi bir öneri?
pom.xml
. Ancak ilginizi çekmesi gereken bir şey, Maven 3'ten bu yana (muhtemelen özellik olarak kötü bir fikir) herhangi bir Maven sürümünde bağımlılık sürümünün (mevcut pomda veya kalıtsal bir bağımlılık ise ana pomda) zorunlu olduğudur. eklenti sürümünün belirtilmesi isteğe bağlıdır. Maven, Maven'ın bulduğu sürüm deposunda bulunan son sürümü kullanacaktır. (1/2)
Benim gibi bir front-end geçmişinden geliyorsan ve Grunt ve npm'ye aşinaysan, bunu şöyle düşün:
Önce koşarsın, diyeceksin npm install grunt-contrib-copy --save-dev
. Bu Maven'inki gibi <dependency></dependency>
. Bir yapı görevini yürütmek için gereken dosyaları indirir.
Ardından görevi Gruntfile.js'de yapılandırırsınız.
copy: {
main: {
src: 'src/*',
dest: 'dest/',
},
}
Bu Maven'inki gibi <plugin>/<plugin>
. Derleme aracına npm / tarafından indirilen kodla ne yapacağını söylüyorsunuz <dependency></dependency>
.
Elbette bu tam bir benzetme değil, ancak kafanızı etrafına dolamanıza yardımcı olacak kadar yakın.
Eklentiler, kendilerine işlevler eklemek için kullanılır Maven
( eclipse
destek veya SpringBoot
destek eklemek Maven
gibi). Bağımlılıklar, herhangi bir Maven aşamasını ( compile
veya test
örneğin) geçmek için kaynak kodunuz tarafından gereklidir . Durumunda JUnit
test kodu temelde kod tabanının parçasıdır ve çağrı beri JUnit
testlerinden içindeki belirli komutları ve o komutlar tarafından sağlanmayan Java SDK
nedenle JUnit
anda mevcut olması gerekir Maven
test aşamasında olup bu bahsederek ele alınır JUnit
bir bağımlılık olarak sizin de pom.xml
dosyaya.
Maven, temelindeki bir eklenti yürütme çerçevesidir - resmi ve standart kompakt tanımlara göre. Daha açık hale getirmek için maven-install/clean/compile/build etc
, bazen manuel olarak da çalıştırdığımız kavanozları oluşturmak / yürütmek için kullandığınız komutlar . Bu nedenle, çalıştırmak (veya yapılandırmak veya yürütmek) istediğiniz şeyler temelde onları mavens pom bağımlılık etiketine koyarsınız ve bu bağımlılıkları kimin çalıştıracağı (ortam kurulumu için gerekli) eklentilerdir.
javac (compiler) dependency.java (dependency)
Tek satır cevap - temel anlayış
Eklenti , maven yapınızın yürütülmesinde kullandığınız bir araçtır
Bağımlılık , kodunuzda kullanacağınız herhangi bir kitaplık anlamına gelir
Eklenti, eserinizi üretmek için kullanılan Maven'in bir uzantısıdır (bir örnek için maven-jar-eklentisi, derlenmiş sınıflarınızdan ve kaynaklarınızdan bir kavanoz yapmak için kullanılır, tahmin edersiniz).
Bağımlılık, derleme ve / veya test ve / veya çalışma zamanında oluşturduğunuz uygulama tarafından ihtiyaç duyulan bir kitaplıktır.