Maven और JAR को सिस्टम स्कोप में जोड़ना


86

मेरे एंड्रॉइड प्रोजेक्ट में एक JAR है और मैं चाहता हूं कि इसे अंतिम एपीके में जोड़ा जाए। ठीक है, यहाँ मैं जाता हूँ:

    <dependency>
        <groupId>com.loopj.android.http</groupId>
        <artifactId>android-async-http</artifactId>
        <version>1.3.2</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${project.basedir}/libs/android-async-http-1.3.2.jar</systemPath>
    </dependency>

लेकिन जब मैं भाग mvn packageरहा हूं तो मुझे चेतावनी मिल रही है:

[WARNING] Some problems were encountered while building the effective model for **apk:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.loopj.android.http:android-async-http:jar should not point at files within the project directory, ${project.basedir}/libs/android-async-http-1.3.2.jar will be unresolvable by dependent projects @ line 36, column 25

और अंतिम एपीके में कोई जार नहीं हैं।

मुझसे इसका समाधान किस प्रकार होगा?


3
आप इस तरह सिस्टम स्कोप का उपयोग नहीं कर सकते। इंस्टॉल का उपयोग करें: इंस्टॉल-फाइल।
बमरगुल्लीज

@bmargulies क्या आप कह सकते हैं कि इसके लिए क्या गुंजाइश है?
efpies

1
मैं ग्रेड करने के लिए स्विच किया गया था और अब मेरे पास इन सिरदर्द नहीं हैं, सिवाय इसके कि मैं मावेन के साथ एक ओपन सोर्स लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं और अस्थायी रूप से जार को हैक कर रहा हूं (जो कि ग्रेवल में इतना आसान है और मावेन में इतना कठिन है)।
डीन हिलर

1
इस सवाल पर चर्चा की गई है कि मावेन में सिस्टम स्कोप के इस्तेमाल से कैसे बचा जाए: stackoverflow.com/questions/3642023/…
मार्क बटलर

स्कोप 'सिस्टम' के बारे में आधिकारिक दस्तावेज: maven.apache.org/guides/introduction/…
गुइल्यूम हस्टा

जवाबों:


24

आपको अपने स्थानीय मावेन भंडार में जार जोड़ने की आवश्यकता होगी । वैकल्पिक रूप से (बेहतर विकल्प) उचित रिपॉजिटरी निर्दिष्ट करें (यदि कोई मौजूद है) तो यह मावेन द्वारा स्वचालित रूप से डाउनलोड किया जा सकता है

किसी भी स्थिति में, <systemPath>निर्भरता से टैग हटा दें


4
मैंने वह लेख देखा है, लेकिन मुझे उम्मीद है कि मैं maven installहर उस कंप्यूटर पर नहीं करूँगा जहाँ मैं उस परियोजना का निर्माण करना चाहता हूँ (दुर्भाग्य से मुझे यह JAR रेपो में नहीं मिला)। धन्यवाद! :)
efpies

1
इसे बिल्ड के भाग के रूप में स्क्रिप्ट किया जा सकता है।
थोरबजोरन रावन एंडरसन

143

मुझे इसका वास्तविक कारण पता नहीं है लेकिन मावेन डेवलपर्स को कुछ मावेन रिपॉजिटरी में सभी लाइब्रेरी (कस्टम भी) स्थापित करने के लिए प्रेरित करता है, इसलिए scope:systemइसे अच्छी तरह से पसंद नहीं किया जाता है, एक साधारण वर्कअराउंड का उपयोग करना हैmaven-install-plugin

उपयोग का पालन करें:

इस तरह से अपनी निर्भरता लिखें

<dependency>
    <groupId>com.mylib</groupId>
    <artifactId>mylib-core</artifactId>
    <version>0.0.1</version>
</dependency>

फिर, मावेन-इंस्टॉल-प्लगइन जोड़ें

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    <executions>
        <execution>
            <id>install-external</id>
            <phase>clean</phase>
            <configuration>
                <file>${basedir}/lib/mylib-core-0.0.1.jar</file>
                <repositoryLayout>default</repositoryLayout>
                <groupId>com.mylib</groupId>
                <artifactId>mylib-core</artifactId>
                <version>0.0.1</version>
                <packaging>jar</packaging>
                <generatePom>true</generatePom>
            </configuration>
            <goals>
                <goal>install-file</goal>
            </goals>
        </execution>
    </executions>
</plugin>

वेतन ध्यान में phase:clean, अपने भंडार में अपना कस्टम पुस्तकालय स्थापित करने के लिए, आप चलाने के लिए है mvn cleanऔर फिरmvn install


10
का प्रयोग क्यों नहीं <phase>process-resources</phase>की बजाय <phase>clean</phase>। इस तरह के परिदृश्य के लिए प्रक्रिया-संसाधन चरण अधिक उपयुक्त लगता है और इसे हमेशा संकलन चरण से पहले कहा जाता है।
jplandrain

1
पहली स्थापना में, क्या आप सुनिश्चित हैं कि आप 'मान्य' चरण पारित कर सकते हैं जो 'निर्मित जीवनचक्र' में प्रक्रिया-संसाधनों से पहले आता है? ; ), 'स्वच्छ जीवनचक्र' पहले 'निर्मित जीवनचक्र' के रूप में आता है और यह किसी भी मान्यता के साथ निर्भरता नहीं करता है, Tutorialspoint.com/maven/maven_build_life_cycle.htm
Ging3r

5
यह काम करता है, लेकिन आप कई निर्भरता कैसे स्थापित करते हैं?
रेनॉड पावलक

6
Stackoverflow को एक सुविधा जोड़नी चाहिए जो समुदाय को ओपी की सही उत्तर की पसंद को ओवरराइड करने की अनुमति देती है, क्योंकि IMHO, इस उत्तर को स्वीकार किया जाना चाहिए! :)
विजय चावड़ा

2
जैसा कि दूसरों ने टिप्पणी की है, cleanचरण के लिए बाध्यकारी बहुत भ्रामक है, यह डिफ़ॉल्ट जीवनचक्र का हिस्सा नहीं है, और इसका अर्थ विकृत करता है clean। इसके अलावा, डिफ़ॉल्ट जीवनचक्र (जैसे validateया process-resources) में एक चरण का उपयोग करने के लिए सुझाया गया परिवर्तन एक बहु-मॉड्यूल स्थिति में विफल हो जाएगा, क्योंकि एग्रीगेटर द्वारा बाल मॉड्यूल के लिए निष्पादित किसी भी कस्टम लक्ष्यों से पहले निर्भरता संकल्प का प्रयास किया जाता है ।
ऊन.in.silver

13
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>

इसे इस्तेमाल करे।


11

सिस्टम स्कोप केवल 'सिस्टम' फाइलों से निपटने के लिए बनाया गया था; कुछ नियत स्थान पर बैठी फाइलें। में फ़ाइलें /usr/lib, या ${java.home}(जैसे tools.jar)। यह .jarआपकी परियोजना में विविध फ़ाइलों का समर्थन करने के लिए डिज़ाइन नहीं किया गया था ।

लेखकों ने जानबूझकर आप को हतोत्साहित करने के लिए pathname विस्तार को सही बनाने से इनकार कर दिया। नतीजतन, अल्पावधि में आप install:install-fileस्थानीय रेपो में स्थापित करने के लिए उपयोग कर सकते हैं , और फिर किसी दिन साझा करने के लिए रेपो प्रबंधक का उपयोग कर सकते हैं ।


3

एक रिपॉजिटरी प्रबंधक का उपयोग करें और इस तरह के जार को इसमें स्थापित करें। यह आपके नेटवर्क में सभी और सभी कंप्यूटरों के लिए आपकी समस्याओं को हल करता है।


3
हमने कल या कल के बाद स्थानीय सर्वर पर रेपो चलाने की योजना बनाई लेकिन इससे पहले कि मैं इस समस्या को किसी और तरीके से हल करूं।
efpies

1
जैसा कि @efpies ने उल्लेख किया है कि यह एक पी-इन-द-स्काई उत्तर हो सकता है जब किसी डेवलपर के पास रेपो प्रबंधक बनाने की अनुमति / क्षमता नहीं होती है।
javadba

इन दिनों, यदि आपके पास डॉकटर स्थापित है, जिसकी आपको आवश्यकता है docker run -d -p 8081:8081 --name nexus sonatype/nexus3- विवरण के लिए hub.docker.com/r/sonatype/nexus3 देखें।
थोरबजोरन रेव एंडरसन

3

इस विन्यास की कोशिश करो। इसने मेरे लिए काम किया:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <warSourceDirectory>mywebRoot</warSourceDirectory>
        <warSourceExcludes>source\**,build\**,dist\**,WEB-INF\lib\*,
            WEB-INF\classes\**,build.*
        </warSourceExcludes>
        <webXml>myproject/source/deploiement/web.xml</webXml>
        <webResources>
            <resource>
                <directory>mywebRoot/WEB-INF/lib</directory>
                <targetPath>WEB-INF/lib</targetPath>
                <includes>
                        <include>mySystemJar1.jar.jar</include>
                         <include>mySystemJar2.jar</include>
                   </includes>
            </resource>
        </webResources>
    </configuration>
</plugin>

0

mvn इंस्टॉल: इंस्टॉल-फाइल -DgroupId = com.paic.maven -DartifactId = tplconfig-maven-plugin -Dversion = 1.0 -Dpackaging = jar -Dfile - tplconfig-maven-plugin-1.0.jar -DgeneratePom = true

जार को स्थानीय रिपॉजिटरी में स्थापित करें।


3
यह सीधे पोम के माध्यम से जोड़ने की तुलना में बोझिल है।
प्रदीबन काथिरावेलु

0

Ging3r के लिए धन्यवाद मुझे समाधान मिला:

इन कदमों का अनुसरण करें:

  1. निर्भरता टैग में उपयोग न करें। Pom.xml फ़ाइल में निर्भरता टैग में निम्नलिखित का उपयोग करें ::

    <dependency>
    <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId>
    <artifactId>suitetalk-axis-proxy-v2019_1</artifactId>
    <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.netsuite.suitetalk.client.v2019_1</groupId>
        <artifactId>suitetalk-client-v2019_1</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.netsuite.suitetalk.client.common</groupId>
        <artifactId>suitetalk-client-common</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. pom.xml फ़ाइल में प्लगइन्स टैग में निम्नलिखित कोड का उपयोग करें:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
                <execution>
                    <id>suitetalk-proxy</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${basedir}/lib/suitetalk-axis-proxy-v2019_1-1.0.0.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.netsuite.suitetalk.proxy.v2019_1</groupId>
                        <artifactId>suitetalk-axis-proxy-v2019_1</artifactId>
                        <version>1.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
                <execution>
                    <id>suitetalk-client</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${basedir}/lib/suitetalk-client-v2019_1-2.0.0.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.netsuite.suitetalk.client.v2019_1</groupId>
                        <artifactId>suitetalk-client-v2019_1</artifactId>
                        <version>2.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
                <execution>
                    <id>suitetalk-client-common</id>
                    <phase>clean</phase>
                    <configuration>
                        <file>${basedir}/lib/suitetalk-client-common-1.0.0.jar</file>
                        <repositoryLayout>default</repositoryLayout>
                        <groupId>com.netsuite.suitetalk.client.common</groupId>
                        <artifactId>suitetalk-client-common</artifactId>
                        <version>1.0.0</version>
                        <packaging>jar</packaging>
                        <generatePom>true</generatePom>
                    </configuration>
                    <goals>
                        <goal>install-file</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    

मैं लिबर फोल्डर से 3 जार शामिल हूं:

स्प्रिंग बूट प्रोजेक्ट में बाहरी जार शामिल हैं

अंत में, उपयोग करें mvn cleanऔर फिर mvn install'mvan क्लीन इंस्‍टॉल' और टारगेट फोल्‍डर से जार् फाइल को रन करें या जहां इंस्‍टॉल करें ( mvn installलॉग देखें ) पथ :

java -jar abc.jar

नोट: एक बात याद रखें अगर आप जेनकिंस पर काम कर रहे हैं तो पहले उपयोग करें mvn cleanऔर फिर mvn clean installआपके लिए कमांड का काम करें क्योंकि mvn clean installनिर्भरता के लिए पिछले कोड कमांड स्टोर कैश के साथ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.