[SPRING] spring-boot : 패키징에 대한 종속성 제외
SPRINGspring-boot : 패키징에 대한 종속성 제외
저는 다른 프로젝트 (프로젝트 B, 프로젝트 C ...)에 포함될 스프링 부트 프로젝트 (프로젝트 A)를 작업 중입니다. 프로젝트 A에는 여러 가지 종속성이 있지만 프로젝트 A를 가져 오는 프로젝트에서는 일부 또는 하나만 필요할 수 있습니다. 프로젝트 A를 패키징하는 동안 jar 종속성을 제외하는 방법을 찾아서 런타임에 프로젝트 B가 필요한 것을 제공하도록 노력하고 있습니다. 테스트 목적으로 프로젝트 A가 독립적으로 실행될 때 의존성을 사용 가능하게하고 싶습니다.
이미 다음을 시도했습니다.
내가 사용하려고 시도 :
<scope>provided</scope>
<optional>true</optional>
아직도 항아리는 최종 유물에서 끝납니다.
또한 다음을 spring-boot-maven-plugin에 추가해 보았습니다.
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<excludeArtifactIds>spring-boot-starter-redis</excludeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
이렇게하면 스프링 부트 종속성이 제거되지만이 종속성을 가진 자식을위한 항아리는 최종 아티팩트로 끝납니다.
해결법
-
==============================
1.현재 프로젝트에서는 JEE 서버에 배포해야하는 애플리케이션 용 war 파일을 생성해야한다는 요구 사항이 있습니다. war 파일에는 JEE 서버가 이미 제공 한 API 또는 구현을 포함하여 필요한 jar 파일 만 포함되어야합니다.
현재 프로젝트에서는 JEE 서버에 배포해야하는 애플리케이션 용 war 파일을 생성해야한다는 요구 사항이 있습니다. war 파일에는 JEE 서버가 이미 제공 한 API 또는 구현을 포함하여 필요한 jar 파일 만 포함되어야합니다.
그러나 테스트 목적으로 Boot가 기본적으로 제공하는 실행 가능한 war 또는 jar 파일을 생성 할 수있는 가능성을 유지하려고합니다.
이를 위해 모든 옵션 종속성을 제공하도록 설정했습니다. 예를 들어, JDBC 드라이버와 같이 직접적으로 개발에 사용 된 몇 가지 종속성이 있습니다. 배포 된 war 파일에 포함하지 않으려합니다. JEE 서버에서 필요없는 다른 스타터와 라이브러리와의 의존성을 제공하는 부트 메인 스타터도 있습니다. 이것은 spring-boot-starter-tomcat 및 spring-boot-starter-jdbc 스타터의 경우입니다. 우리 프로젝트에서는 pom.xml 파일에 followind 의존성이 있습니다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <scope>provided</scope> </dependency>
이런 방법으로 원래의 jar / war 파일에는 의존성이 포함되지 않지만, spring boot maven plugin은 lib-provided jar / war 패키지의 폴더에 포함됩니다.
이러한 종속성은 JEE 서버에서는 볼 수 없지만 패키지 된 응용 프로그램을 필요한 것보다 크게 만듭니다. 해결 방법은 spring boot maven plugin이 다른 이름으로 리 패키징 된 파일을 생성하고 개발 도구를 제외하도록 지시하는 것입니다.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>${start-class}</mainClass> <classifier>exec</classifier> </configuration> </plugin>
이 방법으로 Maven은 애플리케이션을위한 두 개의 패키지를 생성 할 것이다.
귀하의 경우에는 동일한 기술을 사용하여 프로젝트 A가 프로젝트 B에 포함될 패키지를 생성하고 프로젝트 A가 독립 실행 형으로 패키지를 생성 할 수 있습니다.
Project A가 단독으로 실행되도록 패키지를 만들 필요가 없으며 IDE에서만 테스트하면 pom.xml에서 스프링 부트 Maven 플러그인을 제거 할 수도 있습니다.
-
==============================
2.프로젝트 B pom.xml 내부에서 다음을 수행 할 수 있습니다.
프로젝트 B pom.xml 내부에서 다음을 수행 할 수 있습니다.
<dependencies> .... <dependency> <groupId>com.example</groupId> <artifactId>projectA</artifactId> <exclusions> <exclusion> <groupId>com.foo.bar</groupId> <artifactId>baz</artifactId> </exclusion> .... </exclusions> </dependency> ..... </dependencies>
from https://stackoverflow.com/questions/37961730/spring-boot-exclude-dependencies-on-packaging by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring-WS의 응답 페이로드에 첨부 파일을 추가하려면 어떻게해야합니까? (0) | 2019.02.09 |
---|---|
[SPRING] JSR-303과 Spring Validator 클래스를 서비스 레이어에 결합하는 방법은 무엇입니까? (0) | 2019.02.09 |
[SPRING] Spring MVC의 유효성 검사 (0) | 2019.02.09 |
[SPRING] JSF + Spring + Hibernate에서 DTO를 사용하는 방법 (0) | 2019.02.08 |
[SPRING] Spring MVC 애플리케이션의 JSP 페이지에서 리소스에 액세스하기 (0) | 2019.02.08 |