การสร้างโปรเจ็กต์ Java EE ด้วย Maven


13

ฉันพัฒนา Java EE เว็บแอปกับ Eclipse มาประมาณปี นายจ้างของฉันไม่ได้ใช้ Maven แต่ยิ่งฉันอ่านมากเท่าไหร่ฉันก็ยิ่งเชื่อว่า Maven + Hudson จะเป็นประโยชน์อย่างมากสำหรับเรา ก่อนอื่นฉันต้องรู้สึกสะดวกสบายกับเทคโนโลยีเหล่านั้นในเวลาว่างของฉันเพื่อที่ฉันจะสามารถสร้างแนวคิดที่พิสูจน์ได้

ตอนนี้ฉันยังเป็นมือใหม่ Maven มีชุดแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้าง Java EE เว็บแอพด้วย Maven หรือไม่? ตัวอย่างเช่นฉันสามารถสร้างโครงการด้วย archetype พื้นฐานแล้วเพิ่ม JARs ที่จำเป็นทั้งหมดโดยใส่การอ้างอิงใน POM สำหรับ servlet container, EJB, EclipseLink, ฯลฯ ... ที่อาจใช้งานได้ แต่อาจไม่ดีที่สุด วิธีที่จะทำมัน ฉันขอขอบคุณคำแนะนำใด ๆ ที่คุณสามารถให้ในหัวข้อนี้

คำตอบ:


10

อย่ารำคาญกับแม่แบบจนกระทั่งในภายหลัง

สำหรับข้อมูลทั้งหมดที่คุณจำเป็นต้องรู้เกี่ยว Maven มีการอ่านของบางส่วนของหนังสือบนเว็บไซต์ของพวกเขา อย่างไรก็ตามนั่นเป็นเรื่องที่เกินความจริงสำหรับสิ่งที่คุณพยายามจะทำ

ในการเริ่มต้นให้วางโครงร่างแอปพลิเคชันเว็บของคุณตามโครงสร้าง Maven มาตรฐานสำหรับเว็บแอปดังนี้ (คุณไม่จำเป็นต้องใช้ Maven archetype สำหรับสิ่งนี้มันเป็นแค่โฟลเดอร์มาตรฐานจำนวนมากคุณสามารถทำได้ภายใน 2 นาที)

  • src/main/java - มีรหัส Java การผลิตของคุณ
  • src/main/resources - มีแหล่งข้อมูล classpath การผลิตของคุณ (เช่นบริบทของ Spring)
  • src/main/webapp - (มี WEB-INF / web.xml แต่ไม่มีโฟลเดอร์ lib)
  • src/test/java - มีรหัสทดสอบ Java ของคุณ
  • src/test/resources - มีแหล่งข้อมูลการทดสอบของคุณ (เช่นตัวอย่างฟีด XML สำหรับการทดสอบบริการเว็บ ฯลฯ )

ปลั๊กอินพื้นฐาน

ขั้นตอนต่อไปคือการเลือกปลั๊กอิน ผู้ต้องสงสัยตามปกติคือผู้ที่สนับสนุนสะอาดรวบรวมและทรัพยากร (มาเป็นส่วนหนึ่งของ Maven แต่คุณสามารถกำหนดค่าได้) จากนั้นคุณจะได้ผู้ทดสอบหน่วย surefire และปลั๊กอินของสงคราม เพียงพอที่จะสร้างเว็บแอปพลิเคชันขั้นพื้นฐาน

ปลั๊กอินขั้นสูงเพิ่มเติม

ขั้นตอนต่อไปคือแนะนำปลั๊กอิน Findbugs และ PMD ซึ่งจะทำให้โค้ดของคุณครอบคลุมและรายงานปัญหาที่อาจเกิดขึ้นได้อย่างทั่วถึง คุณอาจต้องการมี JXR สำหรับการอ้างอิงข้ามซอร์สโค้ดรายการแท็กสำหรับการติดตามสิ่งที่ต้องทำและแท็กของ REFACTOR และอื่น ๆ เหนือสิ่งอื่นใด...

... ใช้ปลั๊กอิน Jetty สำหรับเว็บแอปพลิเคชัน

ใช้ปลั๊กอิน Jetty เพื่อเรียกใช้ไฟล์ WAR ของคุณภายใน IDE ของคุณเพื่อการดีบักอย่างง่ายดาย มันเร็วและเล็กและทำให้งานเสร็จจริงอย่างรวดเร็ว การมีท่าเทียบเรือเป็นส่วนหนึ่งของ Maven build ของคุณทำให้โครงการของคุณสามารถทดสอบบนเครื่องใดก็ได้โดยไม่จำเป็นต้องมี IDE พร้อมแผงพาเนลเซิร์ฟเวอร์ที่ซับซ้อนบางตัว นอกจากนี้ยังช่วยให้คุณประกาศการพึ่งพาไฟล์ WAR อื่น ๆ ซึ่งหมายความว่าคุณสามารถสร้างสภาพแวดล้อมการทำงานที่สมบูรณ์ซึ่งประกอบด้วยหลายเว็บแอปพลิเคชันทั้งหมดด้วยคำสั่งเดียว "mvn clean jetty: run" สิ่งนี้ทำงานได้ทุกที่และคุณยังสามารถให้ทดสอบการกำหนดค่า JNDI เพื่อให้แหล่งข้อมูล Spring-injected ของคุณทั้งหมดได้รับการกำหนดค่าจากภายนอก หากคุณรวมท่าเทียบเรือท่านี้เข้ากับหน้า HTML สาธิตมาตรฐาน (src/test/resources/demo.html) คุณจะประหยัดเวลาได้เยอะแยะในการพัฒนาที่พยายามจะทำงานในท้องถิ่น คำสั่งเดียวและคุณทำเสร็จแล้ว ง่าย

การกำหนดค่า IDE ของคุณ

ด้วย Maven เป็นเรื่องง่ายเนื่องจากชายใหญ่ทุกคนสนับสนุน: Eclipse, Netbeans และแน่นอน Intellij โปรดส่วนตัวของฉัน เพียงแค่ชี้ IDE ของคุณไปที่ pom.xml แล้วมันจะช่วยลดการอ้างอิงที่ระบุไว้ทั้งหมดสำหรับคุณ WEB-INF/libไม่มีรายละเอียดเพิ่มเติมเกี่ยวกับกับสิ ใน Eclipse คุณมักจะใช้ไฟล์ | นำเข้า ... | โครงการ Maven pom.xml

การรวมเข้ากับฮัดสัน

ก่อนติดตั้ง Hudson (เป็นเพียง webapp) จากนั้นกำหนดเป้าหมายระบบควบคุมเวอร์ชันของคุณเพื่อตรวจสอบเวอร์ชันที่เหมาะสม ขั้นตอนสุดท้ายของคุณคือกำหนดค่าเพื่อใช้ Maven ในการสร้าง เห็นได้ชัดว่า Maven จะต้องติดตั้งในเครื่องสร้างของคุณ (สมมติว่ามันแตกต่างจากเครื่องพัฒนาของคุณ)

ฮัดสันสร้างภาพรวมเท่านั้น

ให้ฮัดสันดำเนินการสร้างสแน็ปช็อตและปล่อยให้บิลด์การสร้างเป็นกระบวนการที่ทำด้วยตนเอง การใช้วิธีการนั้นจะหมายความว่านักพัฒนาซอฟต์แวร์สามารถแบ่งปันรหัสของพวกเขาได้ภายใต้การแก้ไขสแน็ปช็อต (เช่น 1.0.0-SNAPSHOT) และเฉพาะเมื่อมันสามารถผ่านงานสร้างได้จะถูกแชร์ในที่เก็บข้อมูลของทีม โดยทั่วไปแล้วฮัดสันจะดำเนินการ "การติดตั้งใหม่ทั้งหมด" แม้ว่าการรวมเป้าหมาย "ไซต์" อาจเป็นส่วนหนึ่งของกระบวนการของคุณเนื่องจากมันจะสร้างเว็บไซต์โครงการขนาดเล็กสำหรับทุกบิลด์ นักพัฒนาในทีมจะมีการสร้างภาพรวมที่อัปเดตรวมอยู่ในโครงการของพวกเขาโดยอัตโนมัติผ่านกระบวนการจัดการ Maven พึ่งพา

ฮัดสันมีปลั๊กอินมากมายที่สามารถรองรับการวัดได้ทุกรูปแบบ รายการโปรดส่วนตัวของฉันคือการติดตามจำนวนการทดสอบที่ผ่านต่อโครงการเมื่อเวลาผ่านไป เป็นเรื่องที่ดีมากที่แสดงให้เห็นถึงการจัดการว่าจำนวนการทดสอบและความครอบคลุมของหน่วยของคุณเพิ่มขึ้นเรื่อย ๆ

แนวทางการตั้งค่าทั่วไป

แยกที่เก็บของคุณออกเป็นโครงสร้างอย่างน้อยดังต่อไปนี้:

  • การทำงานเป็นทีม - สิ่งประดิษฐ์ที่นำออกใช้ทั้งหมดของคุณไปที่นี่
  • team-snapshot - ส่วนการพัฒนาสแน็ปช็อตทั้งหมดของคุณอยู่ที่นี่
  • Third-party-release - ห้องสมุดบุคคลที่สามที่สนับสนุนของคุณทั้งหมดมาที่นี่ (เช่น Spring, Hibernate เป็นต้น)

บัญชีผู้ใช้นักพัฒนาซอฟต์แวร์ไม่สามารถเขียนไปยังที่เก็บข้อมูลของทีมไม่ว่าจะเป็นสแน็ปช็อตหรือรีลีส สิ่งนี้จะช่วยให้นักพัฒนาเลี่ยงผ่านฮัดสันได้หากพวกเขารีบและจะกลายเป็นบรรทัดฐานอย่างรวดเร็ว

ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดซอร์สลายเซ็น javadocs และ SHA สำหรับบุคคลที่สามทั้งหมดของคุณเสมอ Jarvanaเป็นนักสำรวจพื้นที่เก็บข้อมูลที่ยอดเยี่ยมสำหรับผู้ที่หาชั้นเรียนได้ยาก

พิจารณาการติดตั้งเครื่องมือจัดการพื้นที่เก็บข้อมูลเช่น Nexus หรือ Artifactory เพื่อให้สามารถควบคุมพื้นที่เก็บข้อมูลที่เพิ่มขึ้นของคุณได้ดียิ่งขึ้น


2
Sonar นั้นยอดเยี่ยมมากและเหมาะกับ maven / Hudson
Kevin

1
อย่างแน่นอน ตอนนี้ถ้าฉันทำงานกับโครงการ Maven ในทีมฉันคาดว่า Findbugs / PMD ในท้องถิ่นจะจับปัญหานักฆ่าได้อย่างรวดเร็วจากนั้นงาน Sonar หลังจาก Jenkins สร้างขึ้นด้วยการปรับใช้สิ่งประดิษฐ์กับ Nexus หรือ Artifactory สิ่งนี้จัดเตรียมตำแหน่งของสิ่งประดิษฐ์ได้ง่ายและให้การวิเคราะห์ผลกระทบ ("ที่ใช้") สำหรับสิ่งประดิษฐ์เหล่านั้นตลอดทั้งระบบนิเวศของโครงการ ควบคู่ไปกับ git, JIRA และ Fisheye คุณมีกระบวนการพัฒนาที่ยอดเยี่ยมสำหรับคุณ
Gary Rowe

1
Gary ลิงก์ pdf หมดอายุ
user1787812

1

Maven มีแม่แบบมากมาย

mvn archetype:generate

จะพิมพ์รายการที่มีอยู่

ความแตกต่างหลักระหว่างต้นแบบ Java ธรรมดากับ J2EE ต้นแบบคือไดเร็กทอรีสำหรับjspและรูปภาพจะถูกสร้างขึ้น หากคุณเริ่มต้นโครงการ J2EE ใหม่ให้ลองใช้หนึ่งในนั้นตั้งแต่เริ่มต้น

เมื่อโครงการของคุณเติบโตคุณอาจเพิ่มการพึ่งพามากขึ้น โดยส่วนตัวแล้วฉันชอบที่จะเริ่มต้นด้วยการรวบรวมการพึ่งพาน้อยที่สุด (เช่นต้นแบบพื้นฐาน J2EE) แล้วค่อยเพิ่มสิ่งที่ฉันต้องการ


0

ฉันทำมันโดยเริ่มจากต้นแบบพื้นฐานและเพิ่มบิตทั้งหมดและฉันค่อนข้างแน่ใจว่านั่นไม่ใช่วิธีที่ดีมาก แต่ฉันก็พบว่ามันน่าอึดอัดใจเหมือนกัน การเลือกสิ่งที่เป็นต้นแบบที่ดีนั้นเป็นเรื่องยากเว้นแต่คุณจะ“ เชี่ยวชาญในความลับอย่างลึกซึ้ง” นั่นคือทั้งหมดเล็กน้อยเกินไปเหมือนตำนานพ่อมด (ตรงข้ามกับข้อมูลทางเทคนิคที่ค้นพบได้ง่าย) สำหรับรสนิยมของฉัน ...


และฉันคิดว่ามันเป็นคำถามที่ดี หวังว่าฉันจะได้คำตอบที่ดีกว่า
Donal Fellows

ขอบคุณมากครับ
Michael

0

Maven มีวิธีการสร้างโครงการจากแม่แบบที่เรียกว่าต้นแบบ คุณสามารถใช้คำสั่งmvn archetype:generateที่จะเลือกหนึ่งที่สามารถโต้ตอบ คุณสามารถระบุได้โดยตรง

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DarchetypeVersion=1.0

ทั้งหมดในหนึ่งบรรทัด


0

ฉันใช้ Maven และ Hudson เมื่อสามเดือนที่แล้ว มันช่วยให้ฉันตรวจสอบความสมบูรณ์ของรหัสฐานอย่างสม่ำเสมอโดยทำการทดสอบทุกหน่วยสร้างรายงานการทดสอบ คุณสามารถลองสิ่งนี้
คุณยังสามารถลอง Spring Roo เป็นเครื่องมือ RAD สำหรับสร้างโครงการ J2EE ที่ใช้สปริง

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