Popüler yaklaşımların sorunları
İnternette bulacağınız cevapların çoğu, yerel deponuza bağımlılığı yüklemenizi veya projenizde bir "sistem" kapsamı belirtmenizi pom
ve bağımlılığı projenizin kaynağına dağıtmanızı önerir . Ancak bu çözümlerin her ikisi de aslında kusurlu.
"Yerel Repo'ya Yükle" yaklaşımını neden uygulamamalısınız?
Yerel deponuza bir bağımlılık yüklediğinizde orada kalır. Dağıtım yapay nesneniz bu depoya erişimi olduğu sürece başarılı olacaktır. Sorun çoğu durumda bu havuzun yerel makinenizde bulunmasıdır, bu nedenle bu bağımlılığı başka bir makinede çözmenin bir yolu olmayacaktır. Eserinizi açıkça belirli bir makineye bağımlı hale getirmek, işleri halletmenin bir yolu değildir. Aksi takdirde, bu bağımlılığın daha iyi olmayan bu proje ile çalışan her makineye yerel olarak kurulması gerekecektir.
Neden "Sistem Kapsamı" yaklaşımını uygulamamalısınız?
"Sistem Kapsamı" yaklaşımına bağlı olduğunuz kavanozlar herhangi bir depoya kurulmaz veya hedef paketlerinize takılmaz. Bu nedenle dağıtım paketinizin kullanıldığında bu bağımlılığı çözmek için bir yolu yoktur. Sistem kapsamı kullanımının kullanımdan kaldırılmasının sebebi olduğuna inanıyorum. Neyse, kullanımdan kaldırılmış bir özelliğe güvenmek istemiyorsunuz.
Statik proje içi depo çözümü
Bunu içine koyduktan sonra pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
x.y.z
Maven form kimliğine sahip her bir eser için Maven, proje dizininizde, eser arayışında aşağıdaki konumu içerecektir:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Bununla ilgili daha ayrıntılı bilgi için bu blog gönderisini okuyabilirsiniz .
Proje deposuna yüklemek için Maven'i kullanın
Bu yapıyı el ile oluşturmak yerine kavanozlarınızı yapay olarak kurmak için bir Maven eklentisi kullanmanızı öneririm. Bu nedenle, repo
klasör yürütme altındaki proje içi bir depoya bir yapı yüklemek için :
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Bu yaklaşımı seçerseniz, depo bildirimini şu şekilde basitleştirebilirsiniz pom
:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Yardımcı komut dosyası
Her lib için kurulum komutunu çalıştırarak eğilimli hata kesinlikle tür can sıkıcı ve olduğundan, bir oluşturduk yarar komut dosyası otomatik olarak tüm kavanozları yükler lib
, bir proje deposuna klasörden otomatik dan (GroupID, artifactId vb) tüm meta çözümlenirken dosya adları. Komut dosyası ayrıca, kopyala yapıştırmanız için xml bağımlılıklarını yazdırır pom
.
Hedef paketinize bağımlılıkları ekleyin
Proje içi deponuzu oluşturduğunuzda, projenin bağımlılıklarını kaynağına dağıtma sorununu çözmüş olursunuz, ancak o zamandan beri projenizin hedef yapısı yayınlanmamış kavanozlara bağlı olacaktır, bu nedenle bir depoya çözülemez bağımlılıkları olacaktır.
Bu sorunu aşmak için bu bağımlılıkları hedef paketinize eklemenizi öneririm. Bu, Montaj Eklentisi ile veya OneJar Eklentisi ile daha iyi yapabilirsiniz . OneJar'ın resmi belgeselini kavramak kolaydır.