2014-10-02 8 views
9

मैं एक multimodule परियोजना है, वसंत बूट के साथ निर्माण 1.1.7स्प्रिंग बूट MVC मल्टी मॉड्यूल Executeable जार

संरचना

+ parent 
    + import 
     + web 
     + backend 

मेरे जनक मॉड्यूल microservices की तरह शामिल होंगे है, जो मैं चाहता मेरे माता-पिता (निर्भरता जो सभी उपयोग करते हैं) से प्रबंधित करने के लिए और इसी तरह से। आयात/बैकएंड में मेरा बैच व्यवसाय तर्क है, वेब में एक एमवीसी एप्लीकेशन है, जहां से मैं बैच नौकरी शुरू कर सकता हूं।

ग्रहण में सबकुछ मेरे लिए ठीक काम करता है, मैं एप्लिकेशन.जावा फ़ाइल और एप्लिकेशन कार्यों से आवेदन शुरू कर सकता हूं।

अब मैं निष्पादन योग्य जार फ़ाइल निष्पादित करके उस एप्लिकेशन को निष्पादित करना चाहता था, लेकिन मुझे कंसोल से शुरू करने का प्रयास करते समय निम्न त्रुटि संदेश मिलता है।

java -jar application.jar 
Kein Hauptmanifestattribut in application.jar 

जार बहुत छोटा केवल 5kb है, मैं जार पैकेज में 3 पार्टी निर्भरता के किसी भी जार नहीं मिला।

वेब मॉड्यूल की पोम इस प्रकार की तरह है:

<project> 

     <modelVersion>4.0.0</modelVersion> 

     <parent> 
      <groupId>at.company.bbsng</groupId> 
      <artifactId>bbsng-import</artifactId> 
      <version>0.1.0-SNAPSHOT</version> 
     </parent> 

     <artifactId>bbsng-import-web</artifactId> 
     <name>bbsng-import-web</name> 
     <packaging>jar</packaging> 

     <properties> 
      <start-class>at.company.bbsng.dataimport.Application</start-class> 
     </properties> 


     <dependencies> 

      <!-- APPLICATION --> 
      <dependency> 
       <groupId>at.company.bbsng</groupId> 
       <artifactId>bbsng-import-backend</artifactId> 
       <version>${parent.version}</version> 
      </dependency> 

      <!-- SPRING ... --> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-web</artifactId> 
       <exclusions> 
        <exclusion> 
         <artifactId>spring-boot-starter-logging</artifactId> 
         <groupId>org.springframework.boot</groupId> 
        </exclusion> 
       </exclusions> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-log4j</artifactId> 
      </dependency> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-test</artifactId> 
       <scope>test</scope> 
      </dependency> 

      ... 


     </dependencies> 



     <build> 

      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
       </plugin> 
      </plugins> 

     </build> 

</project> 

आयात मॉड्यूल का पोम है:

<project> 

    <parent> 
     <groupId>at.company.bbsng</groupId> 
     <artifactId>bbsng</artifactId> 
     <version>0.1.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>bbsng-import</artifactId> 
    <name>bbsng-import</name> 
    <packaging>pom</packaging> 

    <modules> 
     <module>backend</module> 
     <module>web</module> 
    </modules> 

</project> 

और माता पिता के पोम है:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>at.company.bbsng</groupId> 
    <artifactId>bbsng</artifactId> 
    <version>0.1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <name>bbsng</name> 
    <description>BBS Next Generation Application Prototype</description> 

    <properties> 
     <java-version>1.8</java-version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <org.springframework.boot-version>1.1.7.RELEASE</org.springframework.boot-version> 
    </properties> 

    <modules> 
     <!-- <module>backend</module> --> 
     <!-- <module>business</module> --> 
     <module>import</module> 
     <!-- <module>infra</module> --> 
     <!-- <module>log</module> --> 
     <!-- <module>rest</module> --> 
    </modules> 

    <dependencyManagement> 
     <dependencies> 

      <!-- SPRING-BOOT ... --> 
      <dependency> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-dependencies</artifactId> 
       <type>pom</type> 
       <version>${org.springframework.boot-version}</version> 
       <scope>import</scope> 
      </dependency> 

      <!-- JAVAX ... --> 
      <dependency> 
       <groupId>javax.validation</groupId> 
       <artifactId>validation-api</artifactId> 
       <version>1.1.0.Final</version> 
      </dependency> 

      <!-- COMMONS ... --> 

      ... 

     </dependencies> 
    </dependencyManagement> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-release-plugin</artifactId> 
       <version>2.5</version> 
       <configuration> 
        <tagBase> 
         svn://svn.int.company.at/stmlf-repository/prototype/bbsng/tags 
        </tagBase> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>${java-version}</source> 
        <target>${java-version}</target> 
       </configuration> 
      </plugin> 
     </plugins> 

    </build> 

    <profiles> 
     <profile> 
      <id>external</id> 
      <build> 
       <resources> 
        <resource> 
         <directory>src/main/resources</directory> 
         <excludes> 
          <exclude>**/*custom*</exclude> 
          <exclude>**/custom/*</exclude> 
         </excludes> 
        </resource> 
       </resources> 
      </build> 
     </profile> 
    </profiles>  

</project> 

आप की जरूरत है अधिक जानकारी कृपया पूछें। क्या आपसे मुझे मदद मिल सकती है।

बहुत बहुत धन्यवाद।

+0

समस्या यह है कि आपकी रनने योग्य एप्लिकेशन क्लास मुख्य परियोजना में होनी चाहिए जो उप/आयातित परियोजना में नहीं है। यदि आप जार का निर्माण कर रहे हैं तो मैनिफेस्ट के लिए मुख्य श्रेणी को स्पष्ट रूप से परिभाषित करते हैं तो यह काम कर सकता है। –

+0

आपके उत्तर के लिए धन्यवाद, यह सही था, कि प्रॉपर्टी स्टार्ट-क्लास सही ढंग से सेट नहीं की गई थी, मैंने इसे ठीक किया। लेकिन यह मेरी समस्या से मेरी मदद नहीं की। अजीब समस्याओं में से एक यह है कि मैवेन में कॉन्फ़िगर की गई कोई निर्भरता मेरी जार-फाइल में नहीं है। वे सब गायब हैं, मेरे बैकएंड मॉड्यूल को शामिल किया गया है जो मैंने अपने वेब मॉड्यूल से उठाया है। इसके परिणामस्वरूप मेरे जार का आकार 5 केबी है। –

+0

'bbsng-import-backend' के लिए पोम क्या है? –

उत्तर

17

अंततः मुझे समाधान मिला।

<plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <executions> 
      <execution> 
       <goals> 
        <goal>repackage</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

तब सभी निर्भरता executeable जार फ़ाइल में पैक कर रहे हैं और: जादू कीवर्ड repackage है, लिंक तो मैं सिर्फ अपने वेब मॉड्यूल repackage लक्ष्य के साथ विन्यस्त में वसंत-बूट-Maven-प्लगइन की आवश्यकता http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/usage.html

देखना कंसोल से शुरू करने योग्य है।

मुझे आशा है कि यह उन लोगों के लिए सहायता करे जो समान समस्या का सामना करते हैं।

+0

क्या आप समझा सकते हैं, यह सबमिड्यूल में से एक में क्यों होना चाहिए? सभी में या माता-पिता में नहीं? – xenteros

+0

वैसे भी, मेरे पास 4 मॉड्यूल और 1 पैरेंट थे और उपरोक्त को मॉड्यूल में जोड़ना जिसमें एक मुख्य विधि समस्या हल हो गई थी। – xenteros

+1

मैंने इसे अपने वेब मॉड्यूल में रखा, क्योंकि वहां मेरा निष्पादन योग्य जार बनाया जाएगा। मुझे लगता है कि कम से कम आपको इसकी आवश्यकता है जहां आपको अपना अंतिम जार मिल जाएगा जिसे आप निष्पादित करना चाहते हैं। –

संबंधित मुद्दे