java Springboot पूरी तरह से निष्पादन योग्य जार बिना निर्भरता के अंदर



maven spring-boot (1)

नोट: कृपया इस प्रश्न को डुप्लिकेट के रूप में चिह्नित करने से पहले सुनिश्चित करें कि आप निष्पादन योग्य जार और पूरी तरह से निष्पादन योग्य स्प्रिंगबूट जार के बीच के अंतर को जानते हैं।

आधिकारिक स्प्रिंग बूट प्रलेखन बताता है कि पूरी तरह से निष्पादन योग्य JAR कैसे बनाया जाए। तब उत्पन्न JAR फ़ाइल /etc/init.d/ से जुड़ी हो सकती है और सामान्य स्क्रिप्ट या जेएसवीसी जैसे उपकरणों के बिना एक सामान्य यूनिक्स सेवा के रूप में शुरू / बंद / पुनरारंभ / स्थिर।

लेकिन उत्पन्न जेएआर में सभी पुस्तकालय हैं और आकार में काफी बड़ा हो सकता है (मेरे मामले में 70 एमबी +)

मैं इस तरह पूरी तरह से निष्पादन योग्य JAR को पुस्तकालयों के बिना उत्पन्न करना चाहता हूं, लेकिन फिर इसे Linux पर SystemV सेवा के रूप में चलाने और किसी भी तरह से बाहरी पुस्तकालयों (JARs) को लिंक करने में सक्षम होना चाहिए।

अद्यतन करें

तैनाती-> परीक्षण-> ठीक चक्र को गति देने के लिए मैं कलात्मक आकार को कम करना चाहता हूं। कभी-कभी मैं मोबाइल नेटवर्क के माध्यम से काम कर रहा हूं और बड़ी फ़ाइल आकार नाटकीय ढंग से मेरी नौकरी गति कम कर सकता है

यदि कोई साधारण कॉन्फ़िगरेशन प्रॉपर्टी या प्रोफ़ाइल या कमांड लाइन ऑप्शन नहीं है तो मैं एक प्रकार का हैक का उपयोग करूँगा।

शुरुआत में, मैं एक निर्माण उत्पन्न कर सकता हूं जिसमें सभी निर्भरताएं होती हैं। तब मैं इसे खोल देना और एक विशेष फ़ोल्डर में सभी पुस्तकालयों को स्थानांतरित कर सकता हूं।

फिर मुझे इसे फिर से पूर्ण रूप से निष्पादन योग्य तरीके से पैक करना होगा और पुस्तकालयों के साथ फ़ोल्डर में इंगित करने के साथ चलाना होगा।

मुझे नहीं लगता कि यह jar उपयोगिता के साथ किया जा सकता है क्योंकि file उपयोगिता data रूप में पूरी तरह से निष्पादन योग्य जार पहचानती है

$ file fully-executable.jar
file fully-executable: data

सामान्य जार के विपरीत

$ file usual.jar
usual.jar: Java Jar file data (zip)

आप स्प्रिंग बूट पतला लांचर का उपयोग करने पर विचार करना चाह सकते हैं। यह आपके एप्लिकेशन कोड के साथ एक जार फ़ाइल बनाता है लेकिन इसकी कोई निर्भरता नहीं है यह एक विशेष पतली लांचर जोड़ता है जो जानता है कि आपके एप्लिकेशन की निर्भरताएं एक दूरस्थ मैवेन रिपॉजिटरी से या स्थानीय कैश से जब कि जार निष्पादित की जाती है, को हल करने के लिए। आप जो करना चाहते हैं उसका विवरण देखते हुए, आप स्थानीय कैश विकल्प का उपयोग करेंगे

पतली लांचर का उपयोग करने वाला पूरी तरह से निष्पादन योग्य जार बनाने के लिए स्प्रिंग बूट के मैवेन प्लगइन का विन्यास इस प्रकार दिखता है:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot.experimental</groupId>
                    <artifactId>spring-boot-thin-layout</artifactId>
                    <version>1.0.3.RELEASE</version>
                </dependency>
            </dependencies>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>




spring-boot-maven-plugin