<scope> ภายใต้ <dependency> ใน pom.xml มีไว้ทำอะไร?


179

ดูที่เอกสารhttp://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.htmlเราสามารถดู<scope>แท็กใต้<dependency>

มันคืออะไรและเราจะใช้มันสำหรับการทดสอบได้อย่างไร?


15
มันมีการอธิบายอย่างดีในเอกสาร: maven.apache.org/guides/introduction/ …
guido

คำตอบ:


266

<scope>องค์ประกอบสามารถใช้เวลา 6 ค่า: รวบรวม , จัดไว้ให้ , รันไทม์ , ทดสอบ , ระบบและนำเข้า

ขอบเขตนี้ใช้เพื่อ จำกัด ความสลับซับซ้อนของการพึ่งพาและยังส่งผลต่อ classpath ที่ใช้สำหรับงานบิลด์ต่าง ๆ

รวบรวม

นี่เป็นขอบเขตเริ่มต้นใช้หากไม่มีการระบุไว้ รวบรวมพึ่งพามีอยู่ใน classpaths ทั้งหมดของโครงการ นอกจากนี้การอ้างอิงเหล่านั้นจะแพร่กระจายไปยังโครงการขึ้นอยู่กับ

ให้

นี่เป็นเหมือนการคอมไพล์ แต่บ่งบอกว่าคุณคาดหวังว่า JDK หรือคอนเทนเนอร์เพื่อให้การอ้างอิงที่รันไทม์ ตัวอย่างเช่นเมื่อสร้างเว็บแอ็พพลิเคชันสำหรับ Java Enterprise Edition คุณจะต้องตั้งค่าการพึ่งพาบน Servlet API และ Java EE API ที่เกี่ยวข้องกับขอบเขตที่จัดเตรียมไว้เนื่องจากเว็บคอนเทนเนอร์จัดเตรียมคลาสเหล่านั้น ขอบเขตนี้มีเฉพาะในคอมไพล์และคลาสพา ธ ทดสอบเท่านั้น

รันไทม์

ขอบเขตนี้บ่งชี้ว่าการพึ่งพาไม่จำเป็นสำหรับการคอมไพล์ แต่สำหรับการดำเนินการ มันอยู่ในรันไทม์และทดสอบพา ธ คลาส แต่ไม่ใช่คลาสพา ธ คอมไพล์

ทดสอบ

ขอบเขตนี้บ่งชี้ว่าการพึ่งพาไม่จำเป็นสำหรับการใช้งานปกติของแอปพลิเคชันและจะพร้อมใช้งานสำหรับขั้นตอนการรวบรวมและการทดสอบเท่านั้น

ระบบ

ขอบเขตนี้คล้ายกับที่ให้ไว้ยกเว้นว่าคุณต้องระบุ JAR ซึ่งมีอย่างชัดเจน สิ่งประดิษฐ์พร้อมใช้งานเสมอและไม่ได้ค้นหาในที่เก็บ

นำเข้า (ใช้ได้เฉพาะใน Maven 2.0.9 หรือใหม่กว่า)

ขอบเขตนี้ใช้กับการพึ่งพาประเภท pom ในส่วนเท่านั้น มันบ่งชี้ว่า POM ที่ระบุควรถูกแทนที่ด้วยการอ้างอิงในส่วนของ POM นั้น เนื่องจากถูกแทนที่การอ้างอิงที่มีขอบเขตของการนำเข้าจึงไม่ได้มีส่วนร่วมในการ จำกัด การส่งผ่านของการพึ่งพา

วิธีตอบคำถามส่วนที่สองของคุณ:

เราจะใช้มันเพื่อทำการทดสอบได้อย่างไร?

โปรดทราบว่าtestขอบเขตอนุญาตให้ใช้การอ้างอิงสำหรับเฟสทดสอบเท่านั้น

อ่านเอกสารประกอบสำหรับรายละเอียดทั้งหมด


ดังนั้นหากคุณใช้ "ทดสอบ" มันจะจบลงใน. jar ที่สร้างขึ้นหรือไม่
markthegrea

1
จะทำอย่างไรถ้าจำเป็นต้องพึ่งพาการรวบรวมและรันไทม์?
Albin


12

หกขอบเขตการพึ่งพา:

  • รวบรวม : ขอบเขตเริ่มต้น classpath สามารถใช้ได้สำหรับทั้งสองsrc/mainและsrc/test
  • ทดสอบ : classpath สามารถใช้ได้สำหรับsrc/test
  • ที่มีให้ : เช่น complie แต่จัดทำโดย JDK หรือคอนเทนเนอร์ตอนรันไทม์
  • runtime : ไม่จำเป็นสำหรับการคอมไพล์ต้องการเฉพาะเวลา runtime
  • ระบบ : จัดให้ในท้องถิ่นให้ classpath
  • อิมพอร์ต : สามารถนำเข้า POM อื่น ๆ ไปยัง<dependencyManagement/>ใช้ได้เฉพาะใน Maven 2.0.9 หรือใหม่กว่าเท่านั้น


4

แท็กขอบเขตอยู่เสมอใช้เพื่อ จำกัด การพึ่งพาสกรรมกริยาและความพร้อมของขวดที่เส้นทางระดับ level.If เราไม่ได้ให้ขอบเขตใด ๆ แล้วขอบเขตเริ่มต้นจะทำงานเช่นการคอมไพล์


11
การรวบรวมหมายความว่าคุณต้องการ JAR สำหรับการรวบรวมและเรียกใช้แอป สำหรับเว็บแอ็พพลิเคชันตัวอย่าง JAR จะถูกวางในไดเร็กทอรี WEB-INF / lib หมายความว่าคุณต้องมี JAR สำหรับการรวบรวม แต่ในขณะดำเนินการนั้นมี JAR ที่จัดเตรียมไว้ให้โดยสภาพแวดล้อมดังนั้นคุณไม่จำเป็นต้องใช้แพ็กเกจกับแอพของคุณ สำหรับเว็บแอปหมายความว่าไฟล์ JAR จะไม่ถูกวางในไดเร็กทอรี WEB-INF / lib สำหรับเว็บแอปหากเซิร์ฟเวอร์แอปมี JAR (หรือฟังก์ชันการทำงาน) แล้วให้ใช้ "ที่มีให้" หรือใช้ "คอมไพล์"
Mukesh

1
กรุณาเพิ่มความคิดเห็นของคุณในคำตอบของคุณ
Supun Wijerathne

0

หากเราไม่ได้ระบุขอบเขตใด ๆ ขอบเขตเริ่มต้นจะถูกรวบรวมหากคุณต้องการยืนยันให้ไปที่แท็บ Effective pom ใน eclipse editor มันจะแสดงให้คุณเห็นว่าเป็นการคอมไพล์


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