Açık kaynaklı bir projede dış bağımlılıklar nasıl ele alınacak?


23

Kişi açık kaynaklı bir proje yazıp Google Code veya GitHub kullandığında ve Lua gibi bir kütüphane kullanmak istediğinde, bunu nasıl yapmalı?

  • Bağımlılık depoya dahil edilmeli mi?
  • Bağımlılık, projenin geri kalanıyla aynı build betiğinden mi yoksa ayrı bir build betiğinden mi yapılmalı?

Derlemeden önce kütüphanenin kuruluma ihtiyacı olmadığı göz önüne alındığında.

Yanıtlar:


10

Git'in alt modüller hakkındaki belgelerini okumanızı şiddetle tavsiye ederim ; tüm kaynaklarınızın Git kullandığını varsayarsak, bu sorunu çözer. Olmazlarsa, entegrasyon amacıyla her zaman bir git repo ayarlayabilirsiniz. Çaba önemsiz ve kazanç önemli.


1
Alt modüller, ortak ve Git'te bağımlılık yönetiminin oldukça zayıf bir şekilde uygulanmasıdır. En azından git alt ağacı çok daha iyi bir yineleme
Lazy Badger

4
-1 Lütfen cevabınıza bağlantının ayrıntılarını ekleyin; aksi halde, bağlantı kaybolduğunda cevap işe yaramaz - şimdi olduğu gibi. Ne yazık ki, henüz, downvote için temsilcisi yok
Precastic

@Precastic: Eğer bağlantı metnini google olarak kullanırsanız, sizi doğrudan yeni sayfaya götürür; Bunun ne kadar bilgilendirici olabileceğinden emin değilim.
Bryan Agee,

1
Lütfen stackoverflow.com/help/how-to-answer - özellikle "Bağlantılar için içerik sağlama" başlıklı bölümü okuyun (alıntı: "Hedef siteye erişilemiyorsa veya sürekli olarak çevrimdışı kalıyorsa, her zaman önemli bir bağlantının en alakalı bölümünü alıntı yapın. . ")
Precastic

17

Bağımlılık depoya dahil edilmeli mi?

Bence bağımlılıklar her zaman kullanım koşullarını ihlal etmediği sürece depoya dahil edilmelidir . Bir şeyler yapmadan önce birkaç şey doğru bağımlılıkların doğru versiyonlarını manuel olarak bulmak zorunda kalmaktan daha can sıkıcıdır. Tabii ki, sizin için bunu yapmak için otomatik araçlara sahipseniz, bu doğru bir bağımlılığı bulabilir ve indirebilir, ancak kolaydır, ya şu anda web'e bağlı değilseniz ya da sunucu kapalıysa veya bağımlılığın projesi tamamen kesildi ve çevrimdışı duruma getirildi mi? Mümkünse daima bağımlılıkları ekleyin.

Bağımlılık, projenin geri kalanıyla aynı build betiğinden mi yoksa ayrı bir build betiğinden mi yapılmalı?

Kaynaktan derlemek için iyi bir neden yoksa, önceden derlenmiş sürümleri kullanın.

Ve neden derleme betiğinde seçenekler sunmuyor? Bağımlılıkların da derlenip derlenmeyeceğini seçmek için basit bir anahtar. Kullanıcı bağımlılıkları da derlemeyi seçerse, ürün derlemenizden kendi derleme komut dosyalarını çağırmanız yeterlidir. Böylece kullanıcı bağımlıların derleme komut dosyalarını manuel olarak çalıştırabilir veya her şeyin tam derlemesini oluşturmayı seçebilir. Ancak, kaynakları derlemek için iyi bir neden yoksa, bağımlılıkları sadece ikili dosyalar olarak sunardım. Açık Kaynak dünyasında, bazı lisansların kaynakları sizin ürününüzle birlikte dağıtmanızı gerektirdiğini ancak bu onların önceden derlenemeyeceği anlamına gelmediğini düşünüyorum.

Kısacası: Mümkünse, tamamen bağımsız bir çalışma paketi sağlayın. Bu, kullanıcılara en kolaylığı sağlayacaktır.


1
@tdammers: Biliyorum, eğer bir linux sisteme yazılım yüklüyorsanız, paket yöneticisi sizin için her şeyi yapar. Ancak bu internet bağlantısı gerektirir ve paket belirli bir formatta olmalıdır ve açıkça otomasyon araçlarının bu konuda yardımcı olabileceğini söyledim. Örneğin, .NET açık kaynaklı araçlar için böyle bir sistemi kullanamazsınız. NHibernate veya Castle Windsor gibi kaynak araçlarına bakarsanız, tüm bağımlılıkların ikili dosyalara dahil olduğunu görürsünüz. Ve yapılacak tek makul şey bu.
Falcon

1
@tdammers: Tesadüfen, bugün burada bir linux makineye OpenOffice SDK kurmam gerekiyor. SDK paket yöneticisi aracılığıyla kurulamadığından, RPM'yi web sitesinden aldım. Sence "rpm --install" ı çalıştırmaya çalıştığım ilk mesaj ne? hata: Başarısız bağımlılıklar: ooobasis3.3-core01, ooobasis3.3-sdk-3.3.0-9567.x86_64 - OH JOY!
Falcon

2
@tdammers: haklısın, ama bu durumda eğer sadece kurulum ve kurulum kolay olsaydı, bu fazlalığa sahip olmayı çok isterdim. Bir bağımlılık cehennemi görmek istediğinizde, / usr / lib dizinine bir bakın. Her şey var: fazlalık, yıkılma ve hangi programın hangi libleri kullandığını bile bilmiyorsunuz. Tabii, paket yöneticisinin halletmesine izin verin! Peki ya paket yöneticisi bahsettiğim açık ofis davasında olduğu gibi idare edemiyorsa. Bu temelde berbat olduğun ve bir şeyleri kurmakta zorlanacağın anlamına geliyor.
Şahin

2
@tdammers: Ve bunun hakkında daha fazla düşündüğüm ve deneyimlerim: Bağımlılıklar başarısız olduğu ya da bir programın bir paket yöneticisi aracılığıyla yüklendiğinde bile bazı programların çalışmayı reddettiği için bu dizinde sembolik bağlantılar oluşturmak zorunda olduğum zamanı bile sayamıyorum. Belki durum şimdi daha iyi hale geldi, ancak genellikle bazı şeyleri çalıştırmak için hala sadece zor bir iş. Uygulamaya olan bağımlılığı henüz göndermiş olsaydı, önlenebilecek sorunlar. Sadece bu sıkıntıyı önlemek için birkaç MB ek alan öderim.
Şahin

2
@tdammers: İnternette belirli bir linux sistemine belirli bir programın nasıl kurulacağına dair sayısız öğretici bu konuya tanıklık ediyor.
Şahin

3

Bu sizin kullanım durumunuz için geçerli olabilir veya olmayabilir, ancak işte yaptığımız her dalda bir "Referanslar" klasörü. Buraya 3. parti DLL'leri yerleştirdik. Bu, kaynak kontrolünde nispeten değişmeyen ikili dosyaların çoğalmasına neden olur, ancak depolama ucuzdur ve herhangi bir noktada her dal ve etiket tam olarak beklediği bağımlılıklara (ve sürüm!) Sahiptir.

Bağımlılıkları kendimiz derleriz ve derlenmiş ikilileri bu klasöre taşırız. Kendi kurum içi paylaşımlı kütüphanemiz de bu şekilde ele alınır. Bu şekilde aynı teknik önceden derlenmiş tescilli kütüphaneler, açık kaynaklı kütüphaneler ve kurum içi kütüphaneler için çalışır.


Şimdi sorunuzu yanıtlayabildiğim kadarıyla şimdi tekrar okudum, aynı şeyi yapın ve projenizin Lua'nın önceden derlenmiş 1.3.5 sürümünü kullandığını söyleyin.


1

Bağımlılık depoya dahil edilmeli mi?

Bu, (SCM yöntemi için herhangi bir kullanılabilir ile) depodaki başvurulabilir eğer bu bağımlılığı parçası ayrıca çözülebilir bir ürün (kaynak bağımlılık), ikilik bağımlılığı, ve

Bağımlılık, projenin geri kalanıyla aynı build betiğinden mi yoksa ayrı bir build betiğinden mi yapılmalı?

Hiç önemli değil. Gereksinimlerinize göre herhangi bir yöntemi tercih edebilirsiniz (hız / şeffaflık / yönetilebilirlik / vb.)


0

Eclipse mağazası olarak, derleme / montaj / dağıtım sürecimizi yönetmek için Buckminster'i kullanmaya yeni başladık .

İlk aşamamız, mevcut bağımlı kütüphanelerimizin tümünü çıkarmak ve Buckminster'in doğru olanları gerçekleştirmeye özen göstermekti. Bu, çok daha hızlı ve daha küçük bir dağıtım sağlar.

Bir sonraki adım, monolitik svnhavuzumuzu bir dizi modüler gitdepoya taşımak olacaktır .

gitBuckminster'in alt modüller ile ne kadar iyi bütünleşeceğini bilmiyorum (veya bu konu için mercurial subrepos), ancak buckminster'in herhangi bir bileşen için kullanılan VCS'ye göre agnostik olması güzel.

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.