এক্সিকিউটেবল জারের জন্য কোন প্রধান শ্রেণিটি স্প্রিং বুটকে ব্যবহার করব?


182
Execution default of goal 
org.springframework.boot:spring-boot-maven-plugin:1.0.1.RELEASE:repackage 
failed: 
Unable to find a single main class from the following candidates

আমার প্রকল্পে একটি mainপদ্ধতি সহ একাধিক শ্রেণি রয়েছে । স্প্রিং বুট মাভেন প্লাগইনটিকে কীভাবে ক্লাসগুলির মধ্যে প্রধান শ্রেণি হিসাবে ব্যবহার করা উচিত তা আমি বলব?


1
java -cp myjar.jar MyClass
দিমিত্রভ

4
@ অ্যাভেজেনি: এটি একটি রানটাইম পতাকা। এটি এতদূর পায় না। এটি নির্মাণে ব্যর্থ।
থিলো

উত্তর:


268

আপনার পোমে আপনার প্রারম্ভিক শ্রেণি যুক্ত করুন:

<properties>
    <!-- The main class to start by executing java -jar -->
    <start-class>com.mycorp.starter.HelloWorldApplication</start-class>
</properties>

অথবা

<build>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>             
        <configuration>    
            <mainClass>com.mycorp.starter.HelloWorldApplication</mainClass>
        </configuration>
    </plugin>
</plugins>
</build>

কোনও কিছু অক্ষম করার দরকার নেই। নাকি আমি কিছু মিস করছি?
ডেভ সায়ার

29
মনে রাখবেন যে আপনি যদি বসন্ত-বুট-স্টার্টার-প্যারেন্ট পম ব্যবহার করেন তবে এই উত্তরটি সঠিক। সেক্ষেত্রে "স্টার্ট-ক্লাস" বৈশিষ্ট্যটি বসন্ত-বুট-মাভেন-প্লাগইনের "মেইনক্লাস" কনফিগারেশন প্যারামিটারে প্রয়োগ করা হয় (আপনি যদি স্টার্টারটি ব্যবহার না করেন তবে আপনি সরাসরি করতে পারেন)।
ডেভ সায়ার

18
ধন্যবাদ @ এলডো_আরজে, এবং আমি এটিতেও কাজ করে দেখতে পেয়েছি:, mvn clean package -Dstart-class=com.foo.Applicationযদি কোন প্রধান শ্রেণিটি ব্যবহার করে গতিশীলভাবে নির্দিষ্ট করতে চান
zhuguowei

2
আরও একটি বিষয় যোগ করতে হবে, @ ঝুগুওয়েই উল্লিখিত প্যারামিটারটি স্প্রিং বুট মাভেন প্লাগইনের জন্যও বৈধ mvn spring-boot:run -Dstart-class=com.foo.Application। আপনি কেবল পোমের প্লাগইনে মূল ক্লাস নির্দিষ্ট না করে থাকলে এটি বৈধ হয়
জেরার্ডো রোজা

দুজনই আমার পক্ষে কাজ করেনি। আমিও ভাবলাম এটি একটি "এবং" ছিল না বা? আমি স্টার্ট-ক্লাসটি দেখছি: সঠিকভাবে MANIFEST.MF এ, তবে বসন্তটি একটি ভিন্ন টিকাশিত @ স্প্রিংবুট অ্যাপ্লিকেশন মূল শ্রেণীর সূচনা করে। কিছু জিনিস বুটস্ট্র্যাপ করার জন্য আমার আসলে সেই শ্রেণিটি দরকার তাই আমি টীকা পরিবর্তন করতে পছন্দ করি না। কেবল এটি সরানো কোনওভাবেই কাজ করে না। বসন্তটি মনে হয় এটির প্রথম প্রধান () শুরু হয়। আমি স্প্রিং-বুট-স্টার্টার-প্যারেন্ট 2.2.0.M3 ব্যবহার করছি।
অ্যাঞ্জেল ও'স্পিয়ার

129

গ্রেডল (ম্যাভেনের পরিবর্তে) ব্যবহারকারীদের জন্য:

springBoot {
    mainClass = "com.example.Main"
}

2
স্প্রিং বুট 2.x একটি ত্রুটি দেয় Could not set unknown property 'mainClass' for object of type org.springframework.boot.gradle.dsl.SpringBootExtension
থান্ডারফোর্জ

উত্তরটি এই পৃষ্ঠাটির নিচে রয়েছে: stackoverflow.com/a/49716696/75672
ভাইটালিক

70

আপনি যদি বসন্ত-বুট-স্টার্টার-প্যারেন্ট পম ব্যবহার না করেন তবে স্প্রিং ডকুমেন্টেশন থেকে :

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.1.3.RELEASE</version>
    <configuration>
        <mainClass>my.package.MyStartClass</mainClass>
        <layout>ZIP</layout>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

মূল শ্রেণীর কনফিগারেশন বাদ দেওয়া যেতে পারে
zhaozhi

@ ঝাঁঝি আপনি / কেন ব্যাখ্যা করতে পারলেন?
রেনেউদ

19

যারা গ্রেডল (ম্যাভেনের পরিবর্তে) ব্যবহার করছেন তাদের জন্য এখানে উল্লেখ করুন :

মূল শ্রেণিটিও স্পষ্টভাবে টাস্কের মেইনক্লাসনাম সম্পত্তি ব্যবহার করে কনফিগার করা যেতে পারে:

bootJar {
    mainClassName = 'com.example.ExampleApplication'
}

বিকল্পভাবে, মূল শ্রেণীর নামটি স্প্রিং বুট ডিএসএল-এর মেইনক্লাসনাম সম্পত্তি ব্যবহার করে প্রজেক্ট-ওয়াইড কনফিগার করা যেতে পারে:

springBoot {
    mainClassName = 'com.example.ExampleApplication'
}

15

যদি আপনি আপনার পমটিতে স্প্রিং-বুট-স্টার্টার-প্যারেন্ট ব্যবহার করেন তবে আপনি কেবল আপনার পোমে নিম্নলিখিতটি যুক্ত করুন:

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

তারপরে আপনার এমভিএন প্যাকেজটি করুন।

দেখুন এই স্প্রিং ডক্স পৃষ্ঠা

এখানে একটি খুব গুরুত্বপূর্ণ দিক উল্লেখ করা হয় যে ডিরেক্টরি কাঠামোটি src / main / java / nameofyourpackage হতে হবে


আমি জাভা ক্লাসগুলির জন্য প্যাকেজের প্রয়োজনীয়তাগুলি প্রতিলিপি করে একবার pom.xML পরিবর্তন না করেই কাজ করার এই সমাধানটি পেয়েছি।

6

আমি নিম্নলিখিত কোডটি pom.xML এ চেষ্টা করেছি এবং এটি আমার জন্য কাজ করেছে

<build>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <mainClass>myPackage.HelloWorld</mainClass> 
        </configuration>
    </plugin>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <fork>true</fork>
            <executable>D:\jdk1.8\bin\javaw.exe</executable>
        </configuration>
    </plugin>
</plugins>


আমি আমার মাল্টিমিডিউলস মাভেন প্রকল্পে বর্ণিত স্প্রিং-বুট-মাভেন-প্লাগইন কনফিগারেশনটি ব্যবহার করার চেষ্টা করেছি, বেশ কয়েকটি স্প্রিং বুট প্রকল্প দ্বারা রচিত এবং বিওএম নির্ভরতা হিসাবে স্প্রিং বুট অন্তর্ভুক্ত এবং এটি একটি কবজির মতো কাজ করেছে। মাভেন-কম্পাইলার-প্লাগইন সম্পর্কিত, আমি আমার পোম প্ল্যাটফর্ম নির্ভর না করায় আমি কোনও কিছুই নির্দিষ্ট করেছিলাম না। ম্যাভেন স্বয়ংক্রিয়ভাবে কাঁটাচামচ, তাই আমি মনে করি আপনি কেবল এই কনফিগারেশনটিকে উপেক্ষা করতে পারেন।
চেলুটে

4

স্প্রিং বুট 1.5 থেকে, আপনি পোম বা বিল্ড.gradle এ ত্রুটি-প্রবণ স্ট্রিং আক্ষরিক উপেক্ষা করতে পারেন ignore পুনঃনির্ধারণের সরঞ্জামটি (ম্যাভেন বা গ্রেডল প্লাগইনের মাধ্যমে) আপনার জন্য টীকায়িত একটি বেছে নেবে @SpringBootApplication। (বিস্তারিত জানার জন্য এই ইস্যুটি দেখুন: https://github.com/spring-projects/spring-boot/issues/6496 )


3

আমি আমার প্রকল্পটির নামকরণ করেছি এবং এটি এখনও Applicationনির্মাণের পথে পুরানো শ্রেণীর সন্ধান করছে । আমি এটি 'বিল্ড' ফোল্ডারে সরিয়েছি এবং সব ঠিক আছে।


1

জাভা 1.9 এবং স্প্রিংবুট 1.5.x সহ এই সমস্যাটি দেখেছেন, যখন প্রধান-শ্রেণীর স্পষ্টভাবে নির্দিষ্ট করা হয়নি।

জাভা ১.৮ এর সাহায্যে এটি সুস্পষ্ট সম্পত্তি ছাড়াই মূল শ্রেণীর সন্ধান করতে সক্ষম এবং 'এমভিএন প্যাকেজ' সূক্ষ্মভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.