java कैसे मेवेन के साथ वसंत आधारित निष्पादन योग्य जार बनाने के लिए?




spring maven (4)

आप निम्न कॉन्फ़िगरेशन जोड़ सकते हैं ताकि सभी जारों से .schema फ़ाइलों की सामग्री एक साथ जुड़ जाए।

<configuration>
  <transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
      <resource>META-INF/spring.handlers</resource>
    </transformer>
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
      <resource>META-INF/spring.schemas</resource>
    </transformer>
  </transformers>
</configuration>

मेरे पास एक मेवेन आधारित स्प्रिंग-डब्ल्यूएस क्लाइंट प्रोजेक्ट है जिसे मैं एक जार के रूप में पैकेज करना चाहता हूं। ग्रहण में, सब कुछ ठीक से चलता है। जब मैं इसे निष्पादन योग्य जार के रूप में पैकेज करने का प्रयास करता हूं, तो मुझे क्लास नॉटफाउंड अपवाद मिलते हैं क्योंकि स्प्रिंग जार मेरे एप्लिकेशन जार में शामिल नहीं होते हैं।

इसलिए मैंने अपने आवेदन जार में अपनी सभी निर्भरताओं को शामिल करने के लिए maven-shade-plugin जोड़ा। जब मैं अपने ऐप जार को देखता हूं, तो मैं सभी निर्भरताओं से सभी वर्ग फ़ाइलों को शामिल करता हूं (सभी पुस्तकालय जार विस्फोटित होते हैं)।

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.cws.cs.Client</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>

        </plugin>
    </plugins>
</build>

मेरी समस्या यह है कि पैकेजिंग प्रक्रिया में, मेरी कई वसंत निर्भरताओं में अलग META-INF/spring.schemas अलग META-INF/spring.schemas फ़ाइलें होती हैं जो एक-दूसरे को ओवरराइड करती हैं। नतीजतन, मेरे अंतिम जार में एक अपूर्ण वसंत.schemas फ़ाइल है।

तो जब मैं अपने निष्पादन योग्य जार को चलाने की कोशिश करता हूं, तो मुझे स्प्रिंग त्रुटि संदेश मिलते हैं कि वसंत.schemas फ़ाइल अपूर्ण होने के बाद से फ़ाइलें नहीं मिल सकती हैं (स्प्रिंग-डब्ल्यूएस के जार ने स्प्रिंग-कोर की spring.schemas फ़ाइल को ओवरराइड कर दिया है)।

मेरा निष्पादन योग्य जार का मेटा-आईएनएफ / spring.schemas:

http\://www.springframework.org/schema/web-services/web-services-1.5.xsd=/org/springframework/ws/config/web-services-1.5.xsd
http\://www.springframework.org/schema/web-services/web-services-2.0.xsd=/org/springframework/ws/config/web-services-2.0.xsd
http\://www.springframework.org/schema/web-services/web-services.xsd=/org/springframework/ws/config/web-services-2.0.xsd

स्प्रिंग-बीन्स.जर मेटा-आईएनएफ / spring.schemas के बजाय:

http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.1.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.0.xsd=org/springframework/beans/factory/xml/spring-tool-2.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.5.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.0.xsd=org/springframework/beans/factory/xml/spring-tool-3.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.1.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/util/spring-util-2.0.xsd=org/springframework/beans/factory/xml/spring-util-2.0.xsd
http\://www.springframework.org/schema/util/spring-util-2.5.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd
http\://www.springframework.org/schema/util/spring-util-3.0.xsd=org/springframework/beans/factory/xml/spring-util-3.0.xsd
http\://www.springframework.org/schema/util/spring-util-3.1.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd
http\://www.springframework.org/schema/util/spring-util.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd

मैं उलझन में हूं। मुझे यकीन नहीं है कि मैं एक निष्पादन योग्य जार के रूप में सब कुछ कैसे पैकेज कर सकता हूं। मुझे नहीं पता कि यह एक छाया-प्लगइन कॉन्फ़िगरेशन समस्या है, या यदि मैं कुछ असंभव करने की कोशिश कर रहा हूं। यह सही नहीं लगेगा कि मुझे मैन्युअल रूप से अपनी खुद की spring.schemas फ़ाइल (दूसरों का एक संयोजन) बनाना होगा।

मैंने बंदूक को थोड़ी सी कूद दी हो सकती है। छाया प्लगइन पर अधिक जानकारी खोदने में, मैंने AppendingTransformer देखा जो मैंने पहले छोड़ा था। हालांकि, मेरी चिंता यह जानना है कि अन्य फाइलों में कौन सी फाइलें हैं? मैंने इस विशेष वसंत मुद्दे को खोज लिया / पकड़ा है। मुझे किसी भी अन्य पुस्तकालयों के बारे में कोई जानकारी नहीं है जो कुछ ऐसा ही कर सकता है ...

किसी भी सुझाव की सराहना की जाएगी।


assembly plugin have issues, use below plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>at.seresunit.lecturemanager_connector.App</mainClass>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

you may get security exception resolve it using below configuration

 <configuration>
    <filters>
        <filter>
            <artifact>*:*</artifact>
            <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
            </excludes>
        </filter>
    </filters>
</configuration>

कल मुझे इस मुद्दे का सामना करना पड़ा था।

समाधान मैन्युअल concatenation और असेंबली प्लगइन के विन्यास द्वारा आवश्यक फाइलों को तैयार करना था:

  <files>
    <file>
        <source>src/META-INF/spring.schemas</source>
        <outputDirectory>META-INF</outputDirectory>
    </file>
    <file>
        <source>src/META-INF/spring.handlers</source>
        <outputDirectory>META-INF</outputDirectory>
    </file>
  </files>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <unpack>true</unpack>
      <scope>runtime</scope>
      <unpackOptions>
        <excludes>
            <exclude>META-INF/spring.handlers</exclude>
            <exclude>META-INF/spring.schemas</exclude>
        </excludes>
      </unpackOptions>  
    </dependencySet>
  </dependencySets>

नोट: एक जार दृष्टिकोण का उपयोग करना पर्याप्त नहीं है - आप हाथ मिश्रित फाइलों पर निश्चित नहीं हो सकते हैं, सभी निर्भरता के निर्यात को रखने की कोशिश करें ...


onejar-maven-plugin शेड-प्लगइन के बजाय onejar-maven-plugin प्लगइन का उपयोग करें। One-JAR आपको जावा एप्लिकेशन को अपनी निर्भरता जार के साथ एक निष्पादन योग्य जार फ़ाइल में पैकेज करने देता है।





maven-shade-plugin