मैं अपने बहु-मॉड्यूल प्रोजेक्ट के लिए असेंबली बनाने के लिए मेवेन असेंबली प्लगइन का उपयोग करता हूं। इस मल्टी-मॉड्यूल प्रोजेक्ट से निर्मित दो अलग-अलग एप्लिकेशन हैं, जिनमें से प्रत्येक निर्भरता का एक अलग सेट है। मैंने एक कस्टम असेंबली डिस्क्रिप्टर बनाया जो मॉड्यूल बिल्ड और उनकी संबंधित निर्भरताओं के साथ दो निर्देशिकाओं (प्रत्येक एप्लिकेशन के लिए) को इकट्ठा करता है। यह सब ठीक है लेकिन एक चीज करता है - यह दोनों मॉड्यूल के लिए एक दूसरे की असेंबली के लिए निर्भरता रखता है।मैवेन असेंबली प्लगइन के साथ बहु-मॉड्यूल निर्भरताओं का प्रबंधन
निम्नलिखित मेरे प्रोजेक्ट का सरलीकृत संस्करण है, जिसमें बिल्कुल वही व्यवहार है। प्रदर्शन के लिए विशुद्ध रूप से
APP
module1
module2
assembly
मैं जोड़ लिया है निर्भरता:
दो मॉड्यूल से मिलकर एक परियोजना और एक विधानसभा मॉड्यूल पर विचार करें
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
<module>assembly</module>
</modules>
</project>
:
com.test.app:module1:jar:1.0
\- commons-cli:commons-cli:jar:1.2:compile
com.test.app:module2:jar:1.0
\- commons-daemon:commons-daemon:jar:1.0.8:compile
यहाँ माता पिता पोम है मॉड्यूल 1 पीओएम:
<project>
<parent>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.app</groupId>
<artifactId>module1</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
module2 पोम:
<project>
<parent>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.app</groupId>
<artifactId>module2</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>commons-daemon</groupId>
<artifactId>commons-daemon</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
</project>
विधानसभा पोम:
<project>
<parent>
<groupId>com.test</groupId>
<artifactId>app</artifactId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.app</groupId>
<artifactId>assembly</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/descriptor.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
</project>
और अंत में, विधानसभा वर्णनकर्ता:
<assembly>
<id>distribution</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>dir</format>
</formats>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.test.app:module1:jar</include>
</includes>
<binaries>
<outputDirectory>module1</outputDirectory>
<unpack>false</unpack>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.test.app:module2:jar</include>
</includes>
<binaries>
<outputDirectory>module2</outputDirectory>
<unpack>false</unpack>
<dependencySets>
<dependencySet>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
आप देख सकते हैं, विधानसभा चरण पैकेज करने के लिए बाध्य कर रहा है । तो, जब मैं निष्पादित
mvn package
मूल निर्देशिका से, मैं विधानसभा
module1/
commons-cli-1.2.jar
commons-daemon-1.0.8.jar
module1-1.0.jar
module2/
commons-cli-1.2.jar
commons-daemon-1.0.8.jar
module2-1.0.jar
मूल रूप से निम्नलिखित है, समस्या है कि यहाँ module1 कॉमन्स-डेमॉन पर निर्भर नहीं करता है, लेकिन विधानसभा प्लगइन शामिल किया गया है निर्भरता इसी प्रकार, मॉड्यूल 2 और कॉमन्स-क्ली के साथ।
क्या कोई समझा सकता है कि असेंबली प्लगइन इस तरह से क्यों व्यवहार करता है?
एक समाधान क्या होगा?
मैं इस अजीब व्यवहार को 'मेवेन-असेंबली-प्लगइन' से उम्मीद नहीं करूंगा ... क्या आप सुनिश्चित हैं कि माता-पिता से आपकी असेंबली प्रोजेक्ट में कोई निर्भरता नहीं है? हमें असेंबली प्रोजेक्ट के लिए उत्पन्न निर्भरता पेड़ दिखाएं। –
असेंबली मॉड्यूल के लिए निर्भरता पेड़ स्पष्ट रूप से खाली है, क्योंकि इसके पीओएम की कोई निर्भरता घोषणा नहीं है। – sertsy