2012-06-21 18 views
33

स्थिति, है मैं एक ही संरचना के साथ दो Maven multimodule परियोजनाएं हैं:मेवेन मल्टीमॉड प्रोजेक्ट का ऑर्डर बनाएं?

 
Parent 
    - Module 1 
    - Module 2 

जब मैं परियोजना 1 का निर्माण, मुझे लगता है कि माता-पिता पहले बनाया गया है (क्रम अभिभावक> module1-> module2 है) । हालांकि प्रोजेक्ट 2 के लिए, पेरेंट आखिरी बार बनाया गया है (ऑर्डर मॉड्यूल 1-> मॉड्यूल 2-> पैरेंट) है। दोनों परियोजनाओं के अलग-अलग निर्माण आदेश क्यों हैं? इसके अलावा, मैं बिल्ड ऑर्डर को मैन्युअल रूप से कैसे नियंत्रित कर सकता हूं?

अद्यतन 1:
दोनों माता पिता परियोजनाओं स्रोत कोड के बिना सरल पोम परियोजनाओं कर रहे हैं, तो मैं प्रति निर्भरता ग्राफ के रूप में निर्माण के क्रम व्याख्या नहीं कर सकते।

अद्यतन 2:
माता पिता poms GAV और बच्चे मॉड्यूल नाम को छोड़कर एक ही कर रहे हैं:

 
<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>parent-group-id</groupId> 
    <artifactId>parent-artifact-id</artifactId> 
    <version>parent-version</version> 
    <packaging>pom</packaging> 
    <name>parent-name</name> 
    <modules> 
     <module>module-1</module> 
     <module>module-2</module> 
    </modules> 
</project> 
+0

संभावित नकल [मैवेन में एक बहु-परियोजना के लिए निर्माण आदेश लागू करें] (http://stackoverflow.com/questions/6593503/impose-build-order-for-a-multi-project-in-maven) – nullpointer

उत्तर

24

निर्माण क्रम Maven रिएक्टर जो एक तंत्र है कि स्वचालित रूप से सही का निर्माण सुनिश्चित करता है से निर्धारित होता है परियोजनाओं को सॉर्ट करके बहुआयामी निर्माण के लिए आदेश।

यह कैसे काम करता है the official documentation देखें।

इसे कहते हैं:

निम्नलिखित संबंध सम्मानित कर रहे हैं जब परियोजनाओं छँटाई:

  • निर्माण
  • एक प्लगइन घोषणा प्लग-इन में एक और मॉड्यूल है में एक और मॉड्यूल पर एक परियोजना निर्भरता निर्माण
  • बिल्ड
  • निर्माण में एक और मॉड्यूल पर एक प्लगइन निर्भरता एक निर्माण विस्तार निर्माण
  • आदेश तत्व में घोषित (अगर कोई अन्य नियम लागू होता है)

आप मैन्युअल रूप से निर्माण के क्रम नियंत्रित नहीं कर सकते में एक और मॉड्यूल पर आयन घोषणा। अगर आप ऑर्डर बदलना चाहते हैं तो आपको अपने प्रोजेक्ट में बदलाव करना होगा जो रिएक्टर सॉर्ट ऑर्डर को प्रभावित करता है।

+0

लेकिन यह स्पष्ट नहीं करता है कि दोनों परियोजनाओं के अलग-अलग निर्माण आदेश क्यों हैं। –

+1

क्या आप अपनी पोम्स साझा कर सकते हैं? –

+0

कृपया अपडेट 2 देखें। –

9

उच्च स्तर पर, बिल्ड ऑर्डर मॉड्यूल निर्भरता ग्राफ के topological sort पर आधारित है।

संपादित करें: आपके लिए प्रश्न। मैं समझता हूं कि प्रोजेक्ट 1 में दो मॉड्यूल हैं और इसलिए प्रोजेक्ट 2 है। लेकिन प्रोजेक्ट 2 में मॉड्यूल स्पष्ट रूप से "पैरेंट" पोम को माता-पिता के रूप में घोषित करते हैं? मैं सोच रहा हूं कि शायद आपकी परियोजना 1 मॉड्यूल स्पष्ट रूप से अभिभावक पोम घोषित करते हैं, और प्रोजेक्ट 2 मॉड्यूल नहीं करते हैं। जिसका अर्थ यह होगा कि प्रोजेक्ट 2 "पैरेंट" वास्तव में बिल्कुल माता-पिता नहीं है और इसलिए मॉड्यूल से पहले इसे बनाना नहीं है। वैसे भी मेरा अनुमान है।

+0

लेकिन दोनों मूल परियोजनाएं बिना किसी स्रोत कोड के साधारण पीओएम परियोजनाएं हैं। निर्भरता ग्राफ यहां समझ में नहीं आता है। –

संबंधित मुद्दे