7

एम्बेडेड टॉमकैट के साथ मेरे स्प्रिंग बूट एप्लिकेशन के लिए, कुछ सीमा के कारण मुझे spring-boot-maven-plugin से दूर करने की आवश्यकता है और maven-shade-plugin का उपयोग करने की आवश्यकता है। मैवेन पैकेज कमांड के साथ मैं सफलतापूर्वक जार फ़ाइल बना सकता हूं। हालांकि, मेरे सभी नियंत्रकों ने काम करना बंद कर दिया और मुझे 404 त्रुटि देता है। मेरे संसाधन फ़ोल्डर में भी स्थिर सामग्री को अब सेवा नहीं दी जा रही है। हमेशा 404 त्रुटि प्राप्त हो रही है।मेवेन छाया प्लगइन के साथ वसंत बूट - नियंत्रक मैप नहीं किए गए (404 त्रुटि)

मेरी pom.xml

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <!-- Import dependency management from Spring Boot --> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-dependencies</artifactId> 
      <version>1.2.7.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.7</java.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
      </configuration> 
     </plugin> 


     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 

      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 

         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>abc.MyMainClass</mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 


    </plugins> 
</build> 

मैं हमेशा की तरह एप्लिकेशन को चलाने:

@SpringBootApplication 
public class MyMainClass{ 

    public static void main(String[] args) { 
     SpringApplication.run(MyMainClass.class, args); 
    } 
} 

इसके अलावा, मैं EmbeddedServletContainerFactory सेम निम्नलिखित बनाने के लिए किया था, अन्यथा कोई त्रुटि फेंक दिया जाएगा।

@Bean 
public EmbeddedServletContainerFactory servletContainer() { 
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); 
    return tomcat; 
} 

अंत में, मैं सिर्फ एक एक नमूना नियंत्रक है,

@RequestMapping(value = "/car", method = RequestMethod.GET) 
@ResponseBody 
public Car test() { 
    return new Car(); 
} 

यह वही कोड किसी भी मुद्दे के बिना काम करता है जब मैं वसंत-बूट-Maven प्लगइन का उपयोग। मैवेन-शेड-प्लगइन का उपयोग शुरू करने के तुरंत बाद, टोमकैट सफलतापूर्वक बूट हो जाता है। हालांकि, सभी नियंत्रक मुझे 404 त्रुटि देते हैं। अगर मैं कुछ गलत कर रहा हूं तो कृपया मुझे मार्गदर्शन करें। देखें डॉक्टर

<transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>abc.MyMainClass</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> 
           <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.tooling</resource> 
           </transformer> 

:

+0

अगर किसी Maven के साथ वसंत बूट की एक काम उदाहरण प्रदान कर सकते हैं यह मददगार होगा छाया प्लगइन। धन्यवाद। –

उत्तर

8

यह बहुत सरल है, तो आप के लिए वसंत-बूट-Maven प्लगइन से स्थानांतरित करना चाहते हैं मेवेन-छाया प्लगइन। मैंने निम्नलिखित प्लगइन जानकारी को pom.xml में जोड़ा है और समस्या हल हो गई है।

(https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/1.2.6.RELEASE/spring-boot-starter-parent-1.2.6.RELEASE.pom)

निर्भरता प्रबंधन:

<dependencyManagement> 
<dependencies> 
    <dependency> 
     <!-- Import dependency management from Spring Boot --> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-dependencies</artifactId> 
     <version>1.2.7.RELEASE</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
</dependencies> 

बिल्ड प्लगइन्स:

<build> 


    <plugins> 


     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
      </configuration> 
     </plugin> 


     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <dependencies> 
       <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <version>1.2.7.RELEASE</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope> 
       <createDependencyReducedPom>true</createDependencyReducedPom> 
       <filters> 
        <filter> 
         <artifact>*:*</artifact> 
         <excludes> 
          <exclude>META-INF/*.SF</exclude> 
          <exclude>META-INF/*.DSA</exclude> 
          <exclude>META-INF/*.RSA</exclude> 
         </excludes> 
        </filter> 
       </filters> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.handlers</resource> 
          </transformer> 
          <transformer 
           implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer"> 
           <resource>META-INF/spring.factories</resource> 
          </transformer> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.schemas</resource> 
          </transformer> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
          <transformer 
           implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>sg.butterfly.emenu.api.config.EmenuApp</mainClass> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

</build> 
2

मौजूदा एक के अलावा, AppendingTransformer का उपयोग कर, की कोशिश उदाहरण के लिए https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer

+0

त्वरित उत्तर के लिए धन्यवाद .. मैंने कोशिश की और यह काम नहीं करता है। ऐसा लगता है कि मैं स्प्रिंग-बूट-मेवेन प्लगइन से माइवेन-शेड-प्लगइन में माइग्रेट करने का तरीका गलत हूं। यह ठीक से कॉन्फ़िगर कैसे करें इसे समझने की आवश्यकता है। –

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