Aşağıdaki tavsiyelerime uyarsanız (yıllardır uyguluyorum), şunları yapabileceksiniz:
- Yapıyı proje kök dizininden aşağıya doğru koruduğunuz sürece, her projeyi kaynak denetiminde herhangi bir yere koyun
- minimum risk ve minimum hazırlık ile her projeyi herhangi bir makinede herhangi bir yere inşa edin
- ikili bağımlılıklarına (yerel "kütüphane" ve "çıktı" dizinleri) erişiminiz olduğu sürece her projeyi tamamen bağımsız olarak oluşturun
- bağımsız oldukları için herhangi bir proje kombinasyonu oluşturun ve bunlarla çalışın
- bağımsız olduklarından, tek bir projenin birden çok kopyasını / versiyonunu oluşturun ve bunlarla çalışın
- kaynak kontrol havuzunuzu oluşturulan dosyalar veya kitaplıklarla karıştırmaktan kaçının
Tavsiye ederim (işte sığır eti):
.DLL, .EXE veya .JAR (Visual Studio ile varsayılan) gibi tek bir birincil teslim edilebilir ürün üretmek için her projeyi tanımlayın.
Her projeyi tek bir köke sahip bir dizin ağacı olarak yapılandırın.
Kök dizinindeki her proje için, bir IDE'ye YOK bağımlılık olmadan onu sıfırdan oluşturacak (ancak mümkünse IDE'de oluşturulmasını engellemeyin) otomatikleştirilmiş bir derleme komut dosyası oluşturun.
Windows'ta nAnt for .NET projelerini veya işletim sisteminize, hedef platformunuza vb. Dayalı benzer bir şeyi düşünün.
Her proje derleme betiğinin, tek bir yerel paylaşılan "kitaplık" dizininden harici (üçüncü taraf) bağımlılıklarına başvurmasını sağlayın, bu tür her ikili dosya TAMAMEN sürüm: %DirLibraryRoot%\ComponentA-1.2.3.4.dll
, %DirLibraryRoot%\ComponentB-5.6.7.8.dll
.
Her proje oluşturma komut dosyasının birincil teslim edilebilir olanı tek bir yerel paylaşılan "çıktı" dizininde yayınlamasını sağlayın: %DirOutputRoot%\ProjectA-9.10.11.12.dll
, %DirOutputRoot%\ProjectB-13.14.15.16.exe
.
Her proje derleme betiğinin, "kitaplık" ve "çıktı" dizinlerinde yapılandırılabilir ve tam sürümlü mutlak yollar (yukarıya bakın) aracılığıyla bağımlılıklarına başvurmasını sağlayın VE BAŞKA YERDE OLMAYACAKTIR.
ASLA bir projenin başka bir projeye veya içeriğinden herhangi birine doğrudan atıfta bulunmasına izin vermeyin - yalnızca "çıktı" dizinindeki birincil çıktılara referanslara izin verin (yukarıya bakın).
Yapılandırılabilir ve tam sürümlü bir mutlak yol ile her proje derleme komut dosyasının gerekli derleme araçlarına başvurmasını sağlayın: %DirToolRoot%\ToolA\1.2.3.4
, %DirToolRoot%\ToolB\5.6.7.8
.
Proje kök dizinine bir mutlak yol akrabası tarafından her proje inşa komut referans kaynak içeriği olun: ${project.base.dir}/src
, ${project.base.dir}/tst
(sözdizimi inşa aracı göre değişir).
HER ZAMAN, HER dosya veya dizine mutlak, yapılandırılabilir bir yol (yapılandırılabilir bir değişkenle belirtilen bir dizinde köklü) aracılığıyla başvurmak için bir proje oluşturma komut dosyası gerektirir: ${project.base.dir}/some/dirs
veya ${env.Variable}/other/dir
.
Bir proje derleme betiğinin HİÇBİR ŞEYE .\some\dirs\here
veya gibi göreli bir yolla başvurmasına ASLA izin vermeyin ..\some\more\dirs
, HER ZAMAN mutlak yollar kullanın.
Bir proje derleme komut dosyasının, C:\some\dirs\here
veya gibi yapılandırılabilir bir kök dizini olmayan mutlak bir yolu kullanarak HERHANGİ BİR ŞEYE başvurmasına ASLA izin vermeyin \\server\share\more\stuff\there
.
Bir proje oluşturma komut dosyası tarafından başvurulan her yapılandırılabilir kök dizin için, bu başvurular için kullanılacak bir ortam değişkeni tanımlayın.
Her makineyi yapılandırmak için oluşturmanız gereken ortam değişkenlerinin sayısını en aza indirmeye çalışın.
Her makinede, gerekli ortam değişkenlerini tanımlayan bir kabuk komut dosyası oluşturun, bu, bu makineye özeldir (ve uygunsa muhtemelen o kullanıcıya özeldir).
Makineye özgü yapılandırma kabuk komut dosyasını kaynak kontrolüne KOYMAYIN; bunun yerine, her proje için, proje kök dizinindeki komut dosyasının bir kopyasını şablon olarak işleyin.
Ortam değişkenlerinin her birini kontrol etmesi için her proje oluşturma komut dosyasını GEREKTİRİN ve tanımlanmamışlarsa anlamlı bir mesajla iptal edin.
Bağımlı derleme aracı yürütülebilir dosyalarının, harici kitaplık dosyalarının ve projeye bağımlı olarak teslim edilebilir dosyaların her birini denetlemek için her proje oluşturma betiğini GEREKTİRİN ve bu dosyalar yoksa anlamlı bir mesajla iptal edin.
Üretilen HERHANGİ BİR dosyayı kaynak kontrolüne kaydetme eğilimine DİRENÇ - proje çıktıları yok, oluşturulan kaynak yok, oluşturulan belgeler yok, vb.
Bir IDE kullanıyorsanız, yapabildiğiniz her türlü proje denetim dosyasını oluşturun ve bunları kaynak denetimine kaydetmeyin (bu, Visual Studio proje dosyalarını içerir).
Geliştirici iş istasyonlarına kopyalanacak / yüklenecek ve makineler oluşturacak, tüm harici kitaplıkların ve araçların resmi bir kopyasını içeren bir sunucu kurun. Kaynak kontrol havuzunuzla birlikte yedekleyin.
Herhangi bir geliştirme aracı YOK olan sürekli bir entegrasyon sunucusu (inşa makinesi) kurun.
Harici kitaplıklarınızı ve çıktılarınızı yönetmek için Ivy gibi (Ant ile birlikte kullanılan) bir araç düşünün.
Maven'i KULLANMAYIN - başlangıçta sizi mutlu edecek ve sonunda sizi ağlatacaktır.
Bunların hiçbirinin Subversion'a özgü olmadığını ve çoğunun herhangi bir işletim sistemi, donanım, platform, dil vb. Hedeflenen projeler için genel olduğunu unutmayın. Biraz işletim sistemi ve araca özgü sözdizimi kullandım, ancak yalnızca örnekleme için -İşletim sisteminize veya tercih ettiğiniz araca çevireceğinize güveniyorum.
Visual Studio çözümleriyle ilgili ek not: Bunları kaynak denetimine koymayın! Bu yaklaşımla bunlara hiç ihtiyacınız olmaz veya bunları oluşturabilirsiniz (tıpkı Visual Studio proje dosyaları gibi). Ancak, çözüm dosyalarını uygun gördükleri şekilde oluşturmaları / kullanmaları için (ancak kaynak kontrolüne teslim edilmemiş) tek tek geliştiricilere bırakmanın en iyi yol olduğunu düşünüyorum. Rob.sln
Mevcut projelerime başvurduğum iş istasyonumda bir dosya tutuyorum. Projelerim tamamen bağımsız olduğundan, istediğim zaman proje ekleyebilir / kaldırabilirim (bu, proje bazlı bağımlılık referansı olmadığı anlamına gelir).
Lütfen Subversion harici (veya diğer araçlarda benzerlerini) kullanmayın, bunlar bir anti-modeldir ve bu nedenle gereksizdir.
Sürekli entegrasyon uyguladığınızda veya sadece yayın sürecini otomatikleştirmek istediğinizde bile bunun için bir komut dosyası oluşturun. Tek bir kabuk komut dosyası oluşturun: proje adı (depoda listelendiği gibi) ve etiket adı parametrelerini alan, yapılandırılabilir bir kök dizin içinde geçici bir dizin oluşturan, verilen proje adı ve etiket adı için kaynağı kontrol eden ( Subversion durumunda uygun URL) bu geçici dizine, testler çalıştıran ve teslim edilebilir olanı paketleyen temiz bir yapı gerçekleştirir. Bu kabuk betiği herhangi bir proje üzerinde çalışmalı ve "derleme araçları" projenizin bir parçası olarak kaynak kontrolünde kontrol edilmelidir. Sürekli bütünleştirme sunucunuz bu komut dizisini proje oluşturmak için temel olarak kullanabilir veya hatta sağlayabilir (ancak yine de kendinizinkini isteyebilirsiniz).
@VonC: Derleme betiğiniz bozulduğunda "ant-abcdjar" yerine "ant.jar" yerine "ant.jar" ile çalışmak istemezsiniz çünkü bilmeden Ant'ın uyumsuz bir sürümüyle çalıştırdınız. Bu özellikle Ant 1.6.5 ve 1.7.0 arasında yaygındır. Genelleme yaparak, HER ZAMAN, platformunuz (Java ABCD) ve oluşturma aracınız (Ant EFGH) dahil, HER bileşenin hangi özel sürümünün kullanıldığını bilmek istersiniz. Aksi takdirde, sonunda bir hatayla karşılaşırsınız ve ilk BÜYÜK sorununuz, çeşitli bileşenlerinizin hangi sürümlerinin dahil olduğunu takip eder. Bu sorunu önceden çözmek daha iyidir.