कैसे बनाने के लिए एक प्लगइन की तरह वास्तुकला runnable?

0

सवाल

हम की एक जोड़ी है, विरासत जावा परियोजनाओं, जो हम करने के लिए परिवर्तित मावेन परियोजनाओं / मॉड्यूल. इससे पहले, सभी परियोजनाओं थे NetBeans परियोजनाओं और था कोई वास्तविक निर्भरता प्रबंधन. बाहरी निर्भरता के अस्तित्व पर कंपनियों के नेटवर्क ड्राइव थे और सीधे रूप में शामिल जार में NetBeans परियोजनाओं के प्रत्येक मॉड्यूल. के लिए आंतरिक निर्भरता, सरल परियोजना के संदर्भ में इस्तेमाल किया गया. यह एक दर्द था का निर्माण करने के लिए, क्योंकि सब कुछ प्रोग्रामर था, का निर्माण करने के लिए सब कुछ सही क्रम में.

अब, हम स्थिति में हैं कि हम कर सकते हैं सभी मावेन मॉड्यूल में IntelliJ विचार और NetBeans. हालांकि, मैं कर रहा हूँ परेशानी हो रही बाहर figuring सबसे अच्छा तरीका गठबंधन करने के लिए अलग अलग मॉड्यूल और बाहरी निर्भरता में एक विशिष्ट तरीका है, जो अनुरूप करने के लिए घर में प्लगइन की तरह संरचना है । के साथ विशेष रूप से NetBeans (विकासशील दोनों के साथ इडस संभव होना चाहिए).

यहाँ है कि कैसे git रिपॉजिटरी / परियोजना संरचना मोटे तौर पर की तरह लग रहा है. फ़ोल्डर संरचना के मॉड्यूल डिफ़ॉल्ट मावेन संरचना प्रत्येक मॉड्यूल के लिए. सूची सुविधा के लिए, इस साइट भी अनाड़ी था, तो मैं इसे शामिल के रूप में स्क्रीनशॉट...

Structure Git Repos

हम एक आंतरिक maven रिपोजिटरी के लिए सामान और निर्माण के साथ मावेन आदि । काम कर रहा है. के लिए इंटेलीजे आइडिया मैं कर सकते हैं चलाने के लिए और डिबग अंत उत्पाद के लिए customer1 के माध्यम से एक कस्टम चलाने के विन्यास, जो प्रतियां आवश्यक फ़ाइलों में आवश्यक संरचना:

enter image description here

के साथ IntelliJ विचार है, मैं डिबग कर सकते हैं सॉफ्टवेयर है, लेकिन मुझे लगता है कि दृष्टिकोण (कस्टम इंटेलीजे चलाने config मैं बनाया, ओर इशारा करते हुए करने के लिए सभी की जरूरत जार और सीधे फ़ाइलें) बजाय बदसूरत है, और के लिए NetBeans मैं नहीं मिल सकता है एक समान "चलाने के लिए विन्यास" तंत्र है ।

तो मैं करने की कोशिश की प्राप्त करने के लिए इस प्रक्रिया का निर्माण, बनाने के द्वारा एक नया "Customer1Runnable" Maven परियोजना के रूप में एक प्रकार के निर्माण का वर्णन है, जो अंक के लिए सभी की जरूरत मावेन मॉड्यूल. इस के आधार पर, मैं विश्वास मैं कर सकता है और प्राप्त करने का यंत्र बनाने के लिए आवश्यक सॉफ्टवेयर संरचना है । फलस्वरूप कॉपी सभी मॉड्यूल में एक प्लगइन फ़ोल्डर और सभी निर्भरता के मॉड्यूल में एक उदारीकरण फ़ोल्डर के अंदर Customer1Runnable परियोजना का उपयोग कर, मावेन-विधानसभा-प्लगइन है ।

पहली बार बंद, है, मेरी धारणा सही है कि यह एक संभव उपयोग के मामले के लिए maven-विधानसभा-प्लगइन?

परियोजना ही नहीं है किसी भी स्रोत फ़ाइलों, यह केवल एक pom.xml और assembly-config.xml वर्णनकर्ता. मैं संलग्न विधानसभा-प्लगइन पैकेज के लिए चरण. चल रहा है जब mvn package आदेश जुड़े सभी मॉड्यूल का निर्माण कर रहे हैं, लेकिन निष्पादन के लिए विधानसभा की-प्लगइन मैं प्राप्त निम्न आउटपुट:

Windows CMD output of Customer1Runnable maven project

शुरुआत के लिए, मैं केवल शामिल करने की कोशिश की एक मॉड्यूल में विधानसभा वर्णनकर्ता. इस एक्सएमएल (opicom-assembly.xml) इसके लिए:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
    <id>opicom-assembly</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <moduleSets>
        <moduleSet>
            <useAllReactorProjects>true</useAllReactorProjects>
                <includes>
                    <include>my.company.reporting:module1</include>
                </includes>
        </moduleSet>
    </moduleSets>
</assembly>

pom.xml के Customer1Runnable परियोजना

 <?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>
    <version>1.6</version>
    <groupId>my.company.customer1</groupId>
    <artifactId>OpicomRunnable</artifactId>
    <packaging>pom</packaging>
    <name>OpicomRunnable</name>
    
    <repositories>
        <repository>
            <id>Company-Maven-Repo</id>
            <url>file:\\\\MyCompany\TFSDrop\MavenRepo</url>
        </repository>
    </repositories>
    
    <modules>
        <module>../my.company.customer1.module1</module>
        <module>../my.company.customer1.module2</module>
        .
        .
        .
        <module>../../MyCompany_Common/Report/my.company.reporting.module1</module>
    </modules>  
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptors>
                        <descriptor>opicom-assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

पोम के एक मॉड्यूल इस तरह दिखता है:

<?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>

    <parent>
        <groupId>my.company</groupId>
        <artifactId>reporting</artifactId>
        <version>1.3</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>module1</artifactId>
    <version>1.3</version>
    <packaging>jar</packaging>



    <dependencies>
        <!-- external dependencies -->
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>21.1.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <finalName>my-company-${project.artifactId}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <outputDirectory>../build</outputDirectory>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

धन्यवाद के लिए किसी भी इनपुट पर मैं क्या कर रहा हूँ गलत है / कैसे इस लक्ष्य को हासिल करने के साथ Maven.

संपादित करें: अनुरोध के रूप में, यहाँ एक उदाहरण परियोजना के रूप में ज़िप फ़ाइल. https://drive.google.com/drive/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k?usp=sharing माता पिता निर्देशिकाओं ModuleGroupCustomer और ModuleGroupCommon का प्रतिनिधित्व करते हैं git रिपॉजिटरी में परिदृश्य. रिश्तेदार मॉड्यूल पथ के कारण होता है, क्योंकि मावेन परियोजना होना चाहिए, जो मेरे "चलाने के लिए config" अंक के लिए मावेन परियोजनाओं दोनों में खजाने.

शायद मैं कर रहा हूँ गलतफहमी मावेन सामान्य में? मैंने सोचा था कि के मामले में यह के उपयोग के मामलों के लिए निर्भरता प्रबंधन के लिए इसी तरह की .नेट nuget संकुल, लेकिन यह भी "के रूप में परियोजना विन्यास" की तरह साधारण NetBeans/इंटेलीजे परियोजनाओं.

यह बेहतर है बस के लिए छड़ी करने के लिए मौजूदा NetBeans परियोजनाओं के लिए दिन के लिए दिन के विकास?

1

सबसे अच्छा जवाब

0

के बाद एक लंबे और थकाऊ प्रक्रिया के परीक्षण और त्रुटि, मैं ने पाया है एक समाधान है जो मेरे लिए काम कर रहे. इसलिए मैं साझा करने का फैसला किया समाधान ऑनलाइन, मामले में किसी और में चलाता है एक इसी तरह की समस्या है । यहाँ है एक लिंक करने के लिए अंतिम ज़िप संग्रह युक्त काम के उदाहरण के लिए परियोजनाओं => फ़ाइल CustomerRunnable_RunningAssemblyPluginStackoverflowExample.zip https://drive.google.com/drive/u/0/folders/1ilJeTrOPgYgUTdOP0J4BQcBnPT5fls0k

मेरी गलती थी कि मैं समझा कि कैसे विधानसभा-प्लगइन काम करता है. दृष्टिकोण है कि मैं मार डाला प्लगइन के अंदर मेरे एग्रीगेटर पोम (CustommerRunnable) गलत है, के रूप में इस मावेन परियोजना केवल मौजूद है के रूप में माता-पिता पोम.

के CustommerRunnable pom.xml संदर्भ के लिए सभी ग्राहकों की plugins के रूप में मॉड्यूल. उन मॉड्यूल नहीं है CustommerRunnable माता पिता के रूप में, लेकिन एक अलग पोम. तो मैंने बनाया एक अलग मावेन परियोजना "वितरण". के pom.xml के वितरण को परिभाषित करता है सभी plugins (ग्राहक की जरूरत मावेन मॉड्यूल) के रूप में निर्भरता. यह भी CustommerRunnable pom.xml के रूप में माता पिता. इसलिए जब मैं इस परियोजना को चलाने में NetBeans, सभी जुड़े मॉड्यूल भी कर रहे हैं बनाने के(यदि आवश्यक).

यह भी विन्यस्त विधानसभा प्लगइन है । विधानसभा प्लगइन है संलग्न करने के लिए मावेन पैकेज-चरण और इस तरह के साथ मार डाला । यह भी का उपयोग करता है एक कस्टम विधानसभा वर्णनकर्ता, जो प्रतियां सभी पहले से परिभाषित plugins में सही फ़ोल्डर. यह द्वारा किया जाता है का उपयोग कर dependencySets के साथ शामिल हैं और बाहर पैटर्न. देखें https://maven.apache.org/plugins/maven-assembly-plugin/advanced-descriptor-topics.html पर जानकारी के लिए । तो एक dependencySet प्रतियां सभी जार फ़ाइलों के सभी plugins करने के लिए /प्लगइन फ़ोल्डर का उपयोग करके एक पैटर्न शामिल हैं. तो यह दृष्टिकोण है उल्टा कॉपी करने के लिए जार फ़ाइलों के सभी बाहरी निर्भरता के लिए एक /lib फ़ोल्डर ।

वर्णनकर्ता भी परिभाषित करता है कुछ अतिरिक्त करने के लिए फ़ाइलों की प्रतिलिपि करने के लिए एक विशेष स्थान है । exec-मावेन-प्लगइन है, तो मैं आराम से कर सकते हैं शुरू ग्राहक सॉफ्टवेयर बाहर की NetBeans. मैं नहीं अभी तक प्रबंधन को कॉन्फ़िगर करने के लिए निष्पादित प्लगइन सही ढंग से के बारे में की जरूरत classpath तर्क.

Endresult इस तरह दिखता है: Assembly folder after building

यह भी टिप्पण लायक है कि विन्यास के "निर्माण परियोजना", "चलाने के लिए परियोजना" और "डिबग" परियोजना के अंदर NetBeans की जरूरत का एक छोटा सा संशोधन है. (ठीक क्लिक करें मॉड्यूल "वितरण" -> "गुण" -> बिंदु "कार्रवाई"

2021-11-25 17:07:28

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में