java - কিভাবে আমি স্প্রিং বুট যা এক্সিকিউটেবল জার জন্য ব্যবহার করতে প্রধান শ্রেণী বলতে পারি?




spring maven executable-jar spring-boot (9)

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 পদ্ধতি সঙ্গে একাধিক শ্রেণীর আছে। স্প্রিং বুট মেন্ভ প্লাগইনটি কীভাবে ক্লাসগুলিকে প্রধান শ্রেণী হিসাবে ব্যবহার করা উচিত তা আমি কীভাবে বলব?


Answers

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


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

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

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

<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>

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

জাভা 1.8 দিয়ে, এটি স্পষ্ট সম্পত্তি ছাড়াই মেইন-ক্লাস খুঁজে পেতে সক্ষম এবং 'mvn প্যাকেজ' সূক্ষ্ম কাজ করে।


আপনার পোম আপনার শুরু ক্লাস যোগ করুন:

<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>
        </plugin>
    </plugins>
</build>

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

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

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


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


আমি 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>


অন্যান্য উত্তর প্রসারিত করতে:

টেস্টিংয়ের জন্য ডক্সে একটি বিভাগ রয়েছে যা ইন্টিগ্রেশন পরীক্ষাগুলিতে পোর্টটি কীভাবে কনফিগার করতে হয় তা ব্যাখ্যা করে:

ইন্টিগ্রেশন পরীক্ষাগুলিতে, পোর্ট কনফিগারেশনটি @SpringBootTest এবং ওয়েব webEnvironment মানগুলি ব্যবহার করে তৈরি করা হয়।

র্যান্ডম পোর্ট:

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

আপনি @LocalServerPort ব্যবহার করে মানটি ইনজেক্ট করতে পারেন যা @Value("${local.server.port}")

  • উদাহরণ:

র্যান্ডম পোর্ট পরীক্ষা কনফিগারেশন:

@RunWith(SpringRunner.class
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class ExampleTest {
   ...
   @LocalServerPort //to inject port value
   int port;
}

নির্ধারিত পোর্ট:

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

এটি সংজ্ঞায়িত করা হয় তাহলে server.port থেকে মান লাগে।

  • যদি @TestPropertySource(properties = "server.port=9192") ব্যবহার করে সংজ্ঞায়িত করা হয় @TestPropertySource(properties = "server.port=9192") এটি অন্যান্য সংজ্ঞায়িত মানগুলি ওভাররাইড করে।
  • যদি না হয় তবে এটি src/test/resources/application.properties (যদি বিদ্যমান থাকে) থেকে মান নেয়।
  • এবং পরিশেষে, এটি সংজ্ঞায়িত না হলে ডিফল্ট 8080 দিয়ে শুরু হয়।

উদাহরণ:

নির্ধারিত পোর্ট পরীক্ষা কনফিগারেশন:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource(properties = "server.port=9192")
public class DemoApplicationTests {

    @Test
    public void contextLoads() {
    }

}






java spring maven executable-jar spring-boot