카테고리 없음

다른 프로젝트의 Spring Boot Jar에 종속성을 추가하는 방법은 무엇입니까?

기록만이살길 2021. 2. 25. 20:33
반응형

다른 프로젝트의 Spring Boot Jar에 종속성을 추가하는 방법은 무엇입니까?

1. 질문(문제점):

저는 Spring Boot 애플리케이션이 있고 거기에서 Jar를 만들었습니다. 다음은 내입니다 pom.xml.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-java8time</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- WebJars -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.6.2</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

이 Jar를 다른 응용 프로그램에서 사용하고 싶으 므로이 jar를 응용 프로그램에 추가했습니다. 그러나 해당 Jar에서 메서드를 호출하면 ClassNotFoundException.

이 문제를 어떻게 해결할 수 있습니까? Spring Boot JAR에 종속성을 어떻게 추가 할 수 있습니까?

2. 해결방안:

기본적으로 Spring Boot는 JAR을 실행 가능한 JAR로 리 패키징 BOOT-INF/classes하고 모든 클래스를 내부 에 배치하고 모든 종속 라이브러리를 내부에 배치하여이를 수행 BOOT-INF/lib합니다. 이 뚱뚱한 JAR을 생성하면 더 이상 다른 프로젝트에 대한 종속성으로 사용할 수 없습니다.

에서 사용자 정의 리 패키지 분류 :

기본적으로 repackage목표는 원래 아티팩트를 다시 패키징 된 아티팩트로 대체합니다. 이는 앱을 나타내는 모듈에 대한 정상적인 동작이지만 모듈이 다른 모듈의 종속성으로 사용되는 경우 재 패키징 된 모듈에 대한 분류자를 제공해야합니다.

그 이유 BOOT-INF/classes는 종속 모듈이 재 패키징 된 jar의 클래스를로드 할 수 없도록 애플리케이션 클래스가 패키지화되어 있기 때문입니다.

종속성으로 사용하기 위해 원본 기본 아티팩트를 유지 classifier하려면 repackage목표 구성에를 추가 할 수 있습니다 .

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>1.4.1.RELEASE</version>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
      <configuration>
        <classifier>exec</classifier>
      </configuration>
    </execution>
  </executions>
</plugin>

이 구성을 통해 Spring Boot Maven 플러그인은 2 개의 JAR을 생성합니다. 주된 것은 일반적인 Maven 프로젝트와 동일하고 두 번째는 분류자가 추가되고 실행 가능한 JAR이됩니다.

65806588
반응형