Maven'de “pom” ambalajı nedir?


176

Derleme ve bir tomcat sunucusunda konuşlandırılması için bir maven projesi verildi. Bugünden önce hiç maven kullanmadım, ama biraz googling yapıyorum. pom.xmlBu projedeki en üst düzey dosyaların ambalaj tipi olarak ayarlanmış gibi görünüyor pom.

mvn installBu uygulamanın dağıtılmasını sağlamak için ne yapmam gerekir? Bir waryerde bir şey bulabilmeyi bekliyordum , ama sanırım yanlış yere bakıyorum ya da bir adımı kaçırıyorum.


3
mvn install - bu, yerel havuzunuza yapaylığınızı (kavanoz, savaş, kulak) yüklemek için kullanılır (genellikle ~ / .m2 / depo direcotry olacaktır)
Łukasz Siwiński 23:03

Yanıtlar:


148

pomtemelde bir alt modül kabıdır, her alt modül ambalaj pom.xmlile aynı dizinde bir alt dizin ile temsil edilir pom.

Bir yerde, proje yapısı içinde iç içe warambalajlı eserler (modüller) bulacaksınız . Maven genellikle her şeyi /targether modülün alt dizinlerine oluşturur . Yani sonra mvn installiçine bakmak targetolan bir modülde alt dizinin warambalaj.

Elbette:

$ find . -iname "*.war"

eşit derecede iyi çalışır ;-).


45

pom ambalaj basitçe birincil yapının bir savaş veya kavanoz değil, pom.xml'in kendisi olduğunu belirten bir özelliktir.

Genellikle söz konusu projenin alt dizinlerinde bulunan "modüller" ile birlikte kullanılır; ancak, herhangi bir birincil ikili oluşturulmayacak belirli senaryolarda da kullanılabilir, diğer tüm önemli eserler ikincil eserler olarak ilan edilmiştir.

Bir "dokümantasyon" projesi düşünün, birincil eser bir PDF olabilir, ancak zaten oluşturulmuştur ve maven'e ihtiyaç duymayan bir PDF'nin nasıl oluşturulacağını anlatmak için yapılandırma üzerinde ikincil bir eser olarak bildirme çalışması istenebilir derlenmiş.


Pom projesi ==> soyut sınıf ve içindeki modül (ler) ==> somut sınıf (lar) gibi benzer satırlarda düşünebileceğim diğer bir örnek.
bharatj

22

Ambalajlanması, pomdiğer projeleri bir araya getiren projelerde ve sadece yararlı çıktısı bazı eklentilerden ekli bir eser olan projelerde kullanılır. Sizin durumunuzda, üst düzey pom'unuzun diğer dizinleri toplamak için içerdiğini tahmin ediyorum <modules>...</modules>ve gerçek çıktı diğer (muhtemelen alt) dizinlerden birinin sonucudur. Bu amaç için mantıklı bir şekilde kodlanırsa, bir ambalajı olacaktır war.


1
"Tek kullanışlı çıktısı bazı eklentilerden ekli bir eser olan" ile ne demek istiyorsun?
omjego

9

Bir mvn: install yaptığınızda sorunuzu cevaplamak için , maven ( pom.xml dosyasında paketleme niteliği) tabanlı paketlenmiş bir eser oluşturur , maven kurulumunuzu çalıştırdıktan sonra .package uzantılı dosyayı bulabilirsiniz

  • Proje çalışma alanının hedef dizininde
  • Ayrıca burada maven 2 yerel depo (aramak olduğunu .m2 / respository senin kutuyu), Kişisel eser .m2 deposu altında (listelenir groupid / artifactId / artifactId-version.packaging ) dizinine
  • Dizinin altına bakarsanız paketlenmiş uzantı dosyasını ve ayrıca pom uzantısını bulacaksınız (pom uzantısı temel olarak bu paketi oluşturmak için kullanılan pom.xml'dir)
  • Eğer maven projeniz çoklu modülse, her modül sadece bir pom'a sahip olacak üst düzey proje dışında yukarıda açıklandığı gibi iki dosyaya sahip olacaktır.

8

Bir eseri POM olarak paketlemek, çok basit bir yaşam döngüsüne sahip olduğu anlamına gelir

package -> install -> deploy

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Bir pom.xml dosyası veya diğer paketleme türlerine uymayan bir proje dağıtıyorsanız bu yararlıdır.

Projelerimizin birçoğu için pom ambalajı kullanıyoruz ve ekstra aşamaları ve hedefleri uygun şekilde bağlıyoruz.

Örneğin, bazı uygulamalarımız şunları kullanır:

prepare-package -> test -> package -> install -> deploy

Uygulamayı yüklediğinizde, yerel .m2 deponuza eklemeniz gerekir. Başka bir yerde yayınlamak için doğru dağıtım yönetimi bilgilerini ayarlamanız gerekir. Eserler Maven tarafından otomatik olarak eklenmezse, maven oluşturucu yardımcı eklentisini de kullanmanız gerekebilir.


6

Klasik örneği görmenizi öneririm: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

Burada my-webapp, benim uygulama projemdeki koda bağlı olan bir web projesidir. İki projeyi bir araya getirmek için, nihayet paketlenecek olan projelerden (maven terminolojisine göre modüller) bahsettiğimiz en üst düzey pom.xml var. Bu üst düzey pom.xml pom ambalajını kullanabilir.

my-webapp savaş ambalajına sahip olabilir ve uygulamama bağımlı olabilir. benim app kavanoz ambalaj olabilir.


2

Gerçek hayat kullanım durumu

Java ağırlıklı bir şirkette Nexus eser deposuna girmesi gereken bir python projemiz vardı. Python'un gerçekten eserleri yok, bu yüzden sadece python dosyalarını .tar veya .zip ve itmek istedim. Reponun zaten maven entegrasyonu vardı, bu yüzden python projesini bir paket olarak paketlemek için maven montaj eklentisi<packaging>pom</packaging> ile işaretleyici kullandık.zip ve yüklemek .

Adımlar bu SO yazısında özetlenmiştir


1

“Pom” ambalajı kavanoz, savaş ve kulak gibi diğer paketleri / modülleri içeren kaptan başka bir şey değildir.

mvn clean compile install gibi dış paket / konteyner üzerinde herhangi bir işlem yaparsanız. sonra iç paketleri / modülleri de temiz derleme yükleme olsun.

her paket / modül için ayrı bir işlem yapmaya gerek yoktur.


1

https://maven.apache.org/pom.html

Ebeveyn ve toplama (çoklu modül) projeleri için pom olması gerekiyordu. Bu türler, bir dizi yaşam döngüsü aşamasına bağlı hedefleri tanımlar. Örneğin, ambalaj kavanoz ise, paket aşaması jar: kavanoz hedefini yürütecektir. Paketleme pom ise, yürütülen hedef site olacaktır: attach-descriptor


0

POM (Proje Nesne Modeli), projeyi oluşturmak için otomasyon betiğinden başka bir şey değildir, XML'de otomasyon betiğini yazabiliriz, bina betiği dosyaları farklı Otomasyon araçlarında yaygın olarak adlandırılır

ANT'de build.xml, MAVEN'de pom.xml dediğimiz gibi

MAVEN hepimiz için yeni olan kavanoz, savaş, kulak ve POM paketleyebilir

İsterseniz POM.XML nedir kontrol edin

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.