Mümkün mü ?
Evet kesinlikle. Geçmişte bu yapıya sahip birkaç projem var, işte size biraz umutla başlamanızı sağlar.
Maven'i bir araya getirmek için kullanacağınız iki ana özelliği var:
Bölmek ve fethetmek
Projelerinizi birden fazla bağımsız projeye bölmeniz gerekecek. Burada bağımsız olarak, proje dışındaki koda yapılan tüm referansların Maven'deki bağımlılıklar yoluyla yapıldığını ve doğrudan kaynak ağacın birleştirilmeden yapıldığını kastediyorum.
Kaynak ağacınızın durumuna bağlı olarak bu bir çok işi temsil edebilir. Bu, Maven’e ayakkabı bağı yapmak için değil, kod temelinizi yapılandırmak ve sterilize etmek için bir araç olarak yaptığınızı söyledi. Bunu bir şey buldukça düşünün, burada bir şeyleri bulmak çok daha kolay:
buradan:
Maven yoğun bir şekilde kongre konusuna güveniyor, bu yüzden eşyalarını ne kadar iyi organize edersen o kadar çok Maven sana yardım edebilir. Bu, kendi konvansiyonuna daha iyi uyması için yeniden organize olmanızı gerektirebilir ve burada bir tavsiye vermek zorunda kalırsam, Maven'in sözleşmelerine uyacak şekilde eşyalarınızı değiştirmenin, Maven'i denemek ve yapılandırmaktan çok daha kolay olduğu söylenebilir. konvansiyonunu anlayın.
Bu projeler ana uygulamanın dışında kullanılabiliyorsa, gerçekten bağımsız kütüphaneler olarak yaşayabilir ve maven bağımlılıklarına dahil olabilir. Kendi havuzlarında (uygulama kaynak ağacında değil) yaşamalı ve ana uygulamanın herhangi bir bölümüne bağlı olmamalıdır.
Uygulamanızın temel bölümleri, projelerde bölündükten sonra modül olarak bir araya getirilebilir. Genellikle bunları uygulamanızın ana kaynak klasörünün alt klasörü olarak yerleştirirsiniz.
Ayrıca, uygulamanız için ebeveyn POM modül bildirimi içerecektir. Ayrıca, uygulamanız için tüm genel bağımlılıkları oraya yerleştirecek, ayrıca yapı eklentilerinin ve yapılandırmalarının çoğunu beyan edeceksiniz. Burada ayrıca, modüllerde tekrar kullanabileceğiniz uygulamanın sürümü gibi şeyler için bir grup özellik yerleştirmenizi şiddetle tavsiye ediyorum. Her şey aynı sürüme sahip olduğunda ve sürüme bir yerde sahip olmak yönetimi çok daha kolay hale getirir.
İşleme
1'den büyük bir takımsanız, Maven bağımlılıklarınız için bir depo kurmanızı şiddetle tavsiye ederim. Bak Artifactory , Nexus veya Archiva . POM dosyasını doğrudan bunlara kurması için yapılandırabilirsiniz, bu yüzden çalıştırdıktan sonra yükü fazla kalmamalı, ancak doğru yerde olan doğru kavanoza bağımlılıkları çözerek ekibinize zaman kazandırır.
Takım oluşturma konusunda bir sonraki mantıksal adım, sürekli bir entegrasyon sistemidir ( Jenkins , daha birçokları vardır). Testleri yürüten ve yapay zemine iten kaynak yapımını ele alacaktır, tüm bunların olduğu yerde yapmanız gereken tek şey kodu çalışmaktır ve gerisi sadece çalışır.
Uygulamanızı bir savaş maveni olarak paketlediğiniz için savaşın üstesinden gelebilir ve jar dosyalarını veya başka benzer işleri birleştirmek zorunda kalmadan tüm bağımlılıkları uygun yerlerine koyabilir , o yüzden endişelenmenize gerek yoktur.
Örnek
Burada daha uzun sürebilirim ama hiçbir şey iyi bir örnek olamaz. Benzer büyüklükteki projeler için github'a bakın ve pom dosyalarını ve klasör hiyerarşilerini nasıl oluşturduklarını görün. Birden fazla bak, bazı hiçbiri gerçekten enkarne, diğerlerinden daha iyi Ayarlarınızı uyacak gerçeği ama bunu halletmek için nasıl düşüncelerinizi yakıt için yeterli bulmalıdır.
Örneğin, Jenkins'i ele alalım:
Onların görebilirsiniz ebeveyn POM oldukça geniş.
Bu bölümde gördüğünüz gibi modüller kullanıyorlar:
<modules>
<module>core</module>
<module>war</module>
<module>test</module>
<module>cli</module>
</modules>
Ve her modül aynı zamanda POM içeren aynı isimde bir alt klasöre karşılık gelir. İstediğiniz kadar iç içe geçirebilirsiniz, ancak bunu akıl sağlığı düzeylerinde tutarsınız;).
Küçük başla
Eğer Maven'i hiç kullanmadıysanız, derim ki, derhal modüllerle başlamamanız. Yavaş ol, başla, sahip olabileceğin en basit kütüphanelerden birini söyle ve onu bir maven projesi yap. O zaman ana uygulamanızı basit bir maven projesi yapın. Bu işe yaradığında, basit bağımlılıklar eklemeye başlayın, ardından ilk modülünüzü ve benzeri şeyleri bölün.
Maven harika bir araçtır, fakat özellikle işler yolunda gitmediğinde, boynunuzda süper bir ağrı olabilir. İlk seferinde bütün sarhoşluktan başlamak, felaket için bir karşılıktır (benim içindi!).
İşler biraz garipse, mvn help:effective-pom
Maven'in gerçekte ne anlama geldiğini görmek için her zaman komutu kullanabilirsiniz .
eklentileri
Yorumunuzdan ne elde etmek istediğinizi daha iyi anlıyorum. Bu durumda, eklentiler yaklaşımı için giderdim. Çalışmayı izole etmek istediğiniz uzatma noktalarının API'sini gösteren bir proje oluşturun. Sonra bunu uygulayacak olan yeni bir projede bağımlılık olarak kullanabilirsiniz. Ana uygulamanızda, sadece bu uygulamalar için uygun bağımlılıkları ekleyin (bu sefer maven modüllerini kullanmıyorsunuz) ve gitmeniz iyi olur. Sonunda ana uygulama projesi dış projelerde yapılan ve bağımlılıklarla yüklenen her şeyin neredeyse hiçbir kaynak kodunu taşımayacaktır.
Ancak bu uygulamanın tamamı, çekirdeklerin değişip değişmediğine bakılmaksızın, savaşın bağımlılıklardan statik olarak inşa edilmiş olup olmadığına bakılmaksızın, tüm başvuruyu yeniden dağıtmanız gerekecektir. Gerçekte olduğundan daha kötü sesler, Aslında sadece yeni değişiklikler gerçekten inşa edilecek, geri kalanı temelde önceki kavanozların bir kopyası olacak. Ancak her şey savaş dosyasında olduğu için yeniden inşa edilmesi gerekecek ve sunucunun durdurulması ve yeniden başlatılması gerekecek.
Eğer daha ileri gitmeye ihtiyacınız varsa, imkansız olmasa da, işler biraz daha karmaşıklaşacaktır. OSGI'ya bakmanızı tavsiye ederim, Apache Felix de başlatabilir , ancak başka uygulamalar da var. Bu, dış kavanozdan almanızı ve uygun eklentiler haline getirmenizi sağlar. Dinamik yeniden yükleme ve güncelleme işlemleri için kapıyı açan bileşenlerin çalışma ömrü boyunca daha fazla kontrol sahibi olacaksınız. Bununla birlikte, çekirdeğinizde büyük değişiklikler yapılması gerekecek, muhtemelen iyi bir başlangıç noktası değil. Ancak, iyi ayrılmış bir projeniz ve tüm parçaların istediğiniz gibi izole edilmesini sağladıktan sonra, güncellemeyi başlatmak için uygulamayı başlatmak ve durdurmak önemli bir sorundur.
Modüller ve bağımlılıklar arasındaki temel fark şudur:
- Modüller, ideal olarak alt klasörler olarak ana uygulama ile aynı kaynak ağacında yaşar.
- Bağımlılıklar herhangi bir yerde olabilir.
İncil'i burada bulabilirsiniz .
Umarım bu yardımcı olur, iyi şanslar.