บรรจุภัณฑ์ "pom" ใน maven คืออะไร?


176

ฉันได้รับโครงการ Maven เพื่อรวบรวมและปรับใช้บนเซิร์ฟเวอร์ Tomcat ฉันไม่เคยใช้ Maven มาก่อนวันนี้ แต่ฉันก็ทำ Google มาไม่น้อย ดูเหมือนว่าระดับบนไฟล์ในโครงการนี้มีชุดประเภทบรรจุภัณฑ์ที่เป็นpom.xmlpom

ฉันควรทำอย่างไรหลังจากmvn installได้รับการปรับใช้แอปพลิเคชันนี้ ฉันคาดหวังว่าจะสามารถค้นหาwarไฟล์บางแห่งหรือบางสิ่งบางอย่าง แต่ฉันคิดว่าฉันกำลังมองหาที่ผิดหรือขาดขั้นตอน


3
MVN ติดตั้ง - นี้จะใช้สำหรับการติดตั้งสิ่งประดิษฐ์ของคุณ (ขวดสงครามหู) ในพื้นที่เก็บข้อมูลในท้องถิ่นของคุณ (โดยปกติมันจะ ~ / .m2 / พื้นที่เก็บข้อมูล direcotry)
ŁukaszSiwiński

คำตอบ:


148

pomโดยพื้นฐานแล้วเป็นคอนเทนเนอร์ของ submodules แต่ละ submodule จะถูกแสดงด้วยไดเรกทอรีย่อยในไดเรกทอรีเดียวกันเช่นเดียวpom.xmlกับpomบรรจุภัณฑ์

บางแห่งซ้อนกันภายในโครงสร้างโครงการคุณจะพบสิ่งประดิษฐ์ (โมดูล) พร้อมwarบรรจุภัณฑ์ โดยทั่วไป Maven จะสร้างทุกสิ่งใน/targetไดเรกทอรีย่อยของแต่ละโมดูล ดังนั้นหลังจากmvn installดูในtargetไดเรกทอรีย่อยในโมดูลพร้อมwarบรรจุภัณฑ์

แน่นอน:

$ find . -iname "*.war"

ทำงานได้ดีเท่าเทียมกัน ;-)


45

pom packaging เป็นเพียงข้อกำหนดที่ระบุว่าวัตถุหลักไม่ใช่สงครามหรือขวด แต่เป็น pom.xml

บ่อยครั้งที่มันถูกใช้ร่วมกับ "modules" ซึ่งโดยทั่วไปจะมีอยู่ในไดเรกทอรีย่อยของโครงการในคำถาม; แม้กระนั้นมันอาจถูกนำมาใช้ในบางสถานการณ์ที่ไม่มีการสร้างฐานสองหลักสิ่งประดิษฐ์สำคัญอื่น ๆ ทั้งหมดได้รับการประกาศให้เป็นวัตถุรอง

คิดว่าโครงการ "เอกสาร" สิ่งประดิษฐ์หลักอาจเป็น PDF แต่มันถูกสร้างขึ้นแล้วและงานเพื่อประกาศว่าเป็นสิ่งประดิษฐ์รองอาจต้องการการกำหนดค่าผ่านการกำหนดค่าเพื่อบอกวิธีการสร้าง PDF ที่ไม่ต้องการ รวบรวม


ตัวอย่างอื่น ๆ ที่ฉันสามารถนึกในบรรทัดที่คล้ายกันเป็นโครงการ pom ==> ระดับนามธรรมและโมดูล (s) ภายในนั้น ==> ระดับคอนกรีต
bharatj

22

บรรจุภัณฑ์ของpomใช้ในโครงการที่รวมโครงการอื่น ๆ และในโครงการที่มีผลลัพธ์ที่มีประโยชน์เพียงอย่างเดียวคือสิ่งประดิษฐ์ที่แนบมาจากปลั๊กอินบางตัว ในกรณีของคุณฉันคาดเดาว่า pom ระดับบนสุดของคุณมี<modules>...</modules>การรวมไดเรกทอรีอื่น ๆ และผลลัพธ์ที่แท้จริงคือผลลัพธ์ของหนึ่งในไดเรกทอรีอื่น ๆ (อาจจะย่อย) ไดเรกทอรี warมันจะถ้ารหัสสมเหตุสมผลเพื่อวัตถุประสงค์นี้มีบรรจุภัณฑ์ของ


1
คุณหมายถึงอะไร "ซึ่งมีเพียงผลผลิตที่มีประโยชน์คือสิ่งที่แนบมาจากปลั๊กอินบางตัว"?
omjego

9

ในการตอบคำถามของคุณเมื่อคุณติดตั้ง mvn: maven จะสร้างสิ่งประดิษฐ์แบบแพคเกจตาม ( คุณลักษณะของบรรจุภัณฑ์ใน pom.xml) หลังจากที่คุณเรียกใช้การติดตั้ง maven คุณจะพบไฟล์ที่มีนามสกุล. package

  • ในไดเรกทอรีเป้าหมายของพื้นที่ทำงานโครงการ
  • นอกจากนี้ที่ที่เก็บโลคัล maven 2ของคุณกำลังค้นหา ( .m2 / respository ) บนกล่องของคุณสิ่งประดิษฐ์ของคุณจะแสดงรายการในที่เก็บ. m2 ภายใต้ไดเรกทอรี ( groupId /ifactId /ifactId-version.packaging )
  • หากคุณดูภายใต้ไดเรกทอรีคุณจะพบไฟล์นามสกุลแพ็คเกจและนามสกุล pom (นามสกุล pom นั้นเป็น pom.xml ที่ใช้สร้างแพ็คเกจนี้)
  • หากโครงการ maven ของคุณเป็นหลายโมดูลแต่ละโมดูลจะสองไฟล์ตามที่อธิบายไว้ข้างต้นยกเว้นสำหรับโครงการระดับบนสุดที่จะมี pom เท่านั้น

8

บรรจุสิ่งประดิษฐ์เป็น POM หมายความว่ามันมีวงจรชีวิตที่ง่ายมาก

package -> install -> deploy

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

สิ่งนี้มีประโยชน์หากคุณกำลังปรับใช้ไฟล์ pom.xml หรือโครงการที่ไม่เหมาะสมกับประเภทบรรจุภัณฑ์อื่น ๆ

เราใช้บรรจุภัณฑ์ป้อมสำหรับโครงการหลายโครงการของเราและผูกเฟสและเป้าหมายเพิ่มเติมตามความเหมาะสม

ตัวอย่างการใช้งานของเราบางส่วนใช้:

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

เมื่อคุณติดตั้งแอปพลิเคชั่น mvn ควรเพิ่มไปยังที่เก็บ. m2 ภายในเครื่องของคุณ หากต้องการเผยแพร่ที่อื่นคุณจะต้องตั้งค่าข้อมูลการจัดการการแจกจ่ายที่ถูกต้อง คุณอาจต้องใช้ปลั๊กอินตัวช่วยสร้าง maven หาก Maven ไม่ได้ติดตั้งโดยอัตโนมัติ


6

ฉันแนะนำให้ดูตัวอย่างคลาสสิกที่: http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once

my-webapp คือโครงการเว็บซึ่งขึ้นอยู่กับรหัสที่โครงการ my-app เพื่อรวมสองโครงการในหนึ่งเดียวเรามี pom.xml ระดับบนสุดที่กล่าวถึงซึ่งเป็นโครงการ (โมดูลตามคำศัพท์ maven) ที่จะรวมในที่สุด pom.xml ระดับบนสุดดังกล่าวสามารถใช้บรรจุภัณฑ์ pom

my-webapp สามารถมีแพ็คเกจสงครามและสามารถพึ่งพาแอพของฉันได้ แอพของฉันสามารถมีบรรจุภัณฑ์ไหได้


2

กรณีใช้งานจริง

ที่ บริษัท Java-heavy เรามีโครงการงูหลามที่จำเป็นในการเข้าไปในคลังเก็บของ Nexus Python ไม่มีสิ่งประดิษฐ์จริง ๆ ดังนั้นเพียงแค่ต้องการ. tar หรือ. zip ไฟล์ python และกด repo มีการรวม maven อยู่แล้วดังนั้นเราจึงใช้ตัว<packaging>pom</packaging>ออกแบบกับปลั๊กอินแอสเซมบลี mavenเพื่อทำแพ็กเกจโครงการไพ ธ อนให้เป็น.zipและอัปโหลด

ขั้นตอนที่อธิบายไว้ในโพสต์ SOนี้


1

บรรจุภัณฑ์ "pom" ไม่ได้มี แต่บรรจุภัณฑ์ซึ่งบรรจุหีบห่อ / โมดูลอื่น ๆ เช่นขวดสงครามและหู

ถ้าคุณทำการดำเนินการใด ๆ บนแพ็คเกจ / คอนเทนเนอร์ด้านนอกเช่นการติดตั้ง mvn clean compile จากนั้นแพ็คเกจ / โมดูลภายในจะได้รับการติดตั้งคอมไพล์อย่างสะอาด

ไม่จำเป็นต้องดำเนินการแยกสำหรับแต่ละแพ็คเกจ / โมดูล


1

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

ประเภทบรรจุภัณฑ์จะต้องเป็น pom สำหรับโครงการหลักและการรวม (หลายโมดูล) ประเภทเหล่านี้กำหนดเป้าหมายที่ผูกไว้กับชุดของขั้นตอนวงจรชีวิต ตัวอย่างเช่นหากบรรจุภัณฑ์เป็นขวดแล้วขั้นตอนแพคเกจจะดำเนินการเป้าหมาย jar: jar หากบรรจุภัณฑ์เป็นปอมเป้าหมายที่ดำเนินการจะเป็นไซต์: Attach-descriptor


0

POM (Project Object Model) คืออะไรนอกจากสคริปต์อัตโนมัติสำหรับการสร้างโครงการเราสามารถเขียนสคริปต์อัตโนมัติใน XML ไฟล์สคริปต์การสร้างจะถูกตั้งชื่อ diffrenetly ในเครื่องมืออัตโนมัติที่แตกต่างกัน

เหมือนที่เราเรียกว่า build.xml ใน ANT, pom.xml ใน MAVEN

MAVEN สามารถบรรจุขวดสงครามหูและ POM ซึ่งเป็นสิ่งใหม่สำหรับเราทุกคน

ถ้าคุณต้องการตรวจสอบPOM.XML คืออะไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.