Maven eser ve grup kimliği


291

Şu anda bir projeyi Ant'den Maven'e taşıma sürecindeyim. Konformist olduğum gibi, bulmak için iyi kurulmuş sözleşmeler kullanmak istiyorum groupIdve artifactIdancak ayrıntılı sözleşmeler bulamıyorum (bazıları var, ama merak ettiğim noktaları kapsamıyorlar).

Bu projeyi ele alalım, önce Java paketi: com.mycompany.teatimer

Çay zamanlayıcı aslında iki kelimedir, ancak Java paketi adlandırma kuralları alt çizgi veya kısa çizginin eklenmesini yasaklar, bu yüzden hepsini birlikte yazıyorum.

groupIdPaket kimliğinin aynısını seçtim çünkü bunun iyi bir fikir olduğunu düşünüyorum. Bu mu?

Sonunda, bir tane seçmek zorundayım artifactId, şu anda gittim teatimer. Diğer Maven projelerine baktığımızda Ama onlar kelimeleri bölmek için kısa çizgi kullanmak artifactIdbu gibi s: tea-timer. Ancak groupId: ile birleştirildiğinde garip görünüyor com.mycompany.teatimer.tea-timer.

Bunu nasıl yapardın?

Başka bir örnek:

Paket ismi: com.mycompany.awesomeinhouseframework

groupId: com.mycompany.awesomeinhouseframework(?)

artifactId: awesome-inhouse-framework(?)


1
ArtifactId ile birleştirilmiş groupId'i nerede görüyorsunuz? Bence sizin ifade ettiğiniz sözleşmeler doğru.
Abhinav Sarkar

2
Aslında, java paket adlarında alt çizgilere izin verilir, bkz: docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
Adriaan Koster

Yanıtlar:


146

Sözleşmeniz makul görünüyor. Maven deposunda çerçevenizi arıyor olsaydım awesome-inhouse-framework-x.y.jar, com.mycompany.awesomeinhouseframeworkgrup dizinini arardım. Ve onu konvansiyonunuza göre bulurdum.

Benim için iki basit kural işe yarıyor:

  • Java paketi adlarıyla ilgili tüm kısıtlamalarla birlikte groupId için ters etki alanı paketleri (oldukça benzersiz olduğu için)
  • artifactId olarak proje adı (jar adı dostu olması gerektiğini unutmayın, yani bir dosya adı için geçersiz olabilecek karakterler içerebilir veya sadece garip görünebilir)

Tamam, sen ve abhin4v bunun normal olduğunu düşünüyorsa, ben de bunu böyle yapacağım, teşekkür ederim!
Noarth

Tire olmayan (awesomeinhouseframework) ve tire (awesome-inhouse-framework) yazımını biraz garip buluyorum. Grup kimliği tirelere izin vermediğinden, artifaktid için de tire olmayan yazımla yapışırdım.
Michael Küller

3
"Jar-name friendly" ile ne demek istediğinizi açıklayınız.
vikramvi

1
Cevapta açıklığa kavuşturuldu :).
Henryk Konsek

241

Tuhaflık son derece özneldir, sadece resmi tavsiyeye uymanızı öneririm:

GroupId, artifactId ve sürüm üzerindeki adlandırma kurallarına ilişkin kılavuz

  • groupIdprojenizi tüm projelerde benzersiz bir şekilde tanımlayacağından bir adlandırma şeması uygulamamız gerekir. Paket adı kurallarına uymalıdır, bunun anlamı, en azından kontrol ettiğiniz bir etki alanı adı olmalıdır ve istediğiniz kadar alt grup oluşturabilirsiniz. Paket adları hakkında daha fazla bilgi bölümüne bakın .

    Örneğin. org.apache.maven,org.apache.commons

    GroupId öğesinin ayrıntı düzeyini belirlemenin iyi bir yolu proje yapısını kullanmaktır. Yani, geçerli proje birden çok modüllü bir projeyse, üst grubun groupId öğesine yeni bir tanımlayıcı eklemelidir.

    Örneğin. org.apache.maven, org.apache.maven.plugins, org.apache.maven.reporting

  • artifactIdsürümü olmayan kavanozun adıdır. Oluşturduysanız, küçük harfler ve garip semboller olmadan istediğiniz adı seçebilirsiniz. Üçüncü taraf bir kavanoz ise, dağıtıldığında kavanozun adını almanız gerekir.

    Örneğin. maven,commons-math

  • versiondağıtırsanız, sayı ve nokta içeren herhangi bir tipik sürümü seçebilirsiniz (1.0, 1.1, 1.0.1, ...). Tarihleri ​​genellikle SNAPSHOT (gecelik) yapılarıyla ilişkilendirildiği için kullanmayın. Üçüncü taraf bir eserse, sürüm numaralarını her ne olursa olsun ve göründüğü kadar garip kullanmanız gerekir.

    Örneğin. 2.0, 2.0.1,1.3.1


4
Bu sözleşmeleri biliyorum, ama gerçekten artefakt adının nasıl oluşturulması gerektiğini (JAR adlandırma kuralları yok) ve groupId ile aynı olursa ne yapmaları gerektiğini söylemiyorlar - tek bir POM görmedim durum böyle.
Noarth

@Noarth 1. Eser adı sizin takdirinize bağlıdır (ancak adında tire kullanmak yaygın bir uygulamadır). 2. Varolmayan mutlak bir "kural" arıyorsunuz (ya harika dahili çerçeveniz birkaç modülden yapılmışsa?). Bkz. Örneğin Bahar, Maven, Hazırda Bekletme, vb. Eserler.
Pascal Thivent

Hayır, hayır modülüm yok, sadece basit projelerim var. Aslında, "müthiş
kurum

11
Ne olmuş package? GroupId ile arasındaki fark nedir?
KonstantinK

1
ArtifactId içinde sayı bulunmasına izin veriliyor mu?
theonlygusti

100

Temel ilk Maven uygulamasını oluşturmak için aşağıdakileri göz önünde bulundurun :

groupId

  • com.companyname.project

artifactId

  • proje

version

  • 0.0.1

Kiralık bir iş com.my.company.projectolarak groupIdveya com.client.company.project?
Giacomo Alzetta

@GiacomoAlzetta, size daha uygun format kıyafetlerinden herhangi birini kullanabilirsiniz. Bazı örnekler 'com.companyName.hirePortal' veya 'org.compnayName.hirePortal'.
Manwal

3
groupId com.companyname değil com.companyname.project olmalıdır
Kamil Nekanowicz

1

Ancak, groupId, artifactId ve groupId'nin kontrol ettiğiniz ters çevrilmiş bir etki alanı adıyla başlaması gereken sürümdeki adlandırma kurallarına ilişkin Kılavuzun resmi tanımına katılmıyorum .

combu proje bir şirkete aittir ve orgbu proje bir sosyal kuruluşa aittir. Bunlar iyi, ancak xxx.tv, xxx.uk, xxx.cn gibi garip alanlar için, groupId adını "tv.", "Cn." İle adlandırmak mantıklı değil, groupId temel bilgileri sunmalıdır etki alanı yerine projenin.


2
Bu kural, eserlerinizi merkezi maven deposuna dağıtmadan önce bir etki alanına sahip olmanız gerektiğinden, maven kullanan geliştiricileri engelliyor. Saçma. Bir alan adına sahip olmak, yıldan yıla oldukça maliyetli olabilir.
Tommy.Tang

1
Orada hiçbir aslında bir kayıt sahibi olmak şartı bu alan adı için. Tek koşul, Java paketinizin adı olacak olan grup kimliğinizin konuşlandırıldığında bu tür başka bir adla çakışmamasıdır. Bu kongre kesinlikle bir değil Maven kullanmasını geliştiriciler önlenmesi.
Basil Bourque

Depo adlarından paket adlarını türetmek iyi bir uygulamadır. GitHub kullanıyorsanız, hesabınız çağrılır myuserve havuzunuz çağrılır myrepo, ardından paket adını kullanın com.github.myuser.myrepo. Bu ücretsiz ve hala eşsiz.
fxnn

-14

Tamamen benzersiz bir jar dosyası almak için bunu düşünün:

  • GroupID - com.şirket adı.proje
  • ArtifactId - com-companyname-project
  • Paket - com.şirket adı.proje
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.