programing

스프링 부트 프로젝트(JAR 또는 WAR 양쪽에 도입) 1개

i4 2023. 4. 6. 20:47
반응형

스프링 부트 프로젝트(JAR 또는 WAR 양쪽에 도입) 1개

Spring Boot 프로젝트를 JAR과 WAR 양쪽에 패키징할 수 있는 방법이 있습니까?pom.xml또는 어플리케이션 소스?

Spring Boot JAR 어플리케이션을 WAR로 변환하는 것을 읽어 보았습니다만, 프로젝트를 WAR로 변환해, JAR로 패키징 할 수 없게 됩니다.

기대하지 않는다mvn package둘 다 할 수 있어요.내가 원하는 건...mvn i-want-a-jar프로젝트를 JAR로 패키징합니다.아니면 도망갈 수도 있고mvn i-want-a-war이 프로젝트를 WAR로 패키지화합니다.

이게 가능합니까?

나는 그것을 더해서 간신히 해냈다.

<packaging>${packaging.type}</packaging>

POM 파일로 이동하여 JAR 및 WAR에 대해 다른 프로파일을 설정합니다.

  <profiles>
    <profile>
      <id>jar</id>
      <properties>
        <packaging.type>jar</packaging.type>
      </properties>
    </profile>
    <profile>
      <id>war</id>
      <properties>
        <packaging.type>war</packaging.type>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

지금이다mvn package -P warWAR과mvn package -P jar그럼 JAR이 생성됩니다.

JAR과 WAR용으로 별도의 모듈을 작성하는 방법도 있습니다만, 저는 그 루트를 사용하지 않았습니다.

실행 가능한 WAR 파일의 문제점은 무엇입니까?그게 네게 정말 필요한 거 아니야?

추신:
java -jar name.war

최근에는 원래 실행 가능한 Jar로 패키징된 기존 Spring Boot 기반 프로젝트에서도 Tomcat 및 WildFly 배포를 지원해야 하는 유사한 요구 사항이 있었습니다.

이 프로젝트에서 사용되는 일부 종속성(예: WebJars) 때문에 WildFly(VFS 지원)에는 이러한 종속성 중 일부가 필요하지만 다른 배포에는 필요하지 않기 때문에 WAR 패키지로의 단순한 전환은 옵션이 아니었습니다.

해결책은 코어 모듈에 실제 프로젝트가 포함되어 있지만 Spring Boot의 플러그인이 적용되지 않은 상태로 프로젝트 모듈을 재구성하는 것이었습니다.또한 여러 패키지 모듈은 코어 모듈에 의존하여 도입 아티팩트(부트 및 기타 플러그인, 도입 고유의 의존관계 등)를 구성합니다.

이를 통해 프로젝트 빌드는 한 번의 빌드 실행으로 여러 배포 아티팩트(Boot의 실행 파일 JAR, 기존 WAR 및 WildFly 고유의 WAR)를 생성할 수 있었습니다.

이것이 유용하다고 생각되는 경우, 접근 방식을 시연하기 위한 샘플 프로젝트는 Github에서 이용할 수 있습니다.이 프로젝트는 Gradle 또는 Maven에 의해 구축될 수 있습니다.

언급URL : https://stackoverflow.com/questions/23868580/one-spring-boot-project-deploy-to-both-jar-or-war

반응형