[SPRING] Maven을 사용하여 스프링 기반 실행 파일 병을 만드는 방법은 무엇입니까?
SPRINGMaven을 사용하여 스프링 기반 실행 파일 병을 만드는 방법은 무엇입니까?
단일 병으로 패키징하고자하는 Maven 기반의 Spring-WS 클라이언트 프로젝트가 있습니다. 일식에서는 모든 것이 제대로 실행됩니다. 실행 가능한 jar 파일로 패키지하려고하면 Spring jar 파일이 응용 프로그램 jar에 포함되어 있지 않기 때문에 ClassNotFound 예외가 발생합니다.
그래서 maven-shade-plugin을 추가하여 응용 프로그램 jar에 모든 종속성을 포함 시켰습니다. 내 응용 프로그램 항아리를 보면, 모든 종속 파일의 모든 클래스 파일이 포함되어 있습니다 (모든 라이브러리 항아리가 폭발했습니다).
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.cws.cs.Client</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
내 문제는 패키징 프로세스에서 여러 스프링 종속성이 서로 다른 META-INF / spring.schemas 파일을 가지고 있다는 것입니다. 결과적으로 내 마지막 항아리에는 불완전한 spring.schemas 파일이 있습니다.
따라서 실행 가능한 jar 파일을 실행하려고하면 spring.schemas 파일이 불완전하기 때문에 파일을 찾을 수 없다는 Spring 오류 메시지가 나타납니다 (Spring-WS의 jar 파일은 spring-core의 spring.schemas 파일을 오버라이드했습니다).
내 실행 가능한 jar의 META-INF / spring.schemas :
http\://www.springframework.org/schema/web-services/web-services-1.5.xsd=/org/springframework/ws/config/web-services-1.5.xsd
http\://www.springframework.org/schema/web-services/web-services-2.0.xsd=/org/springframework/ws/config/web-services-2.0.xsd
http\://www.springframework.org/schema/web-services/web-services.xsd=/org/springframework/ws/config/web-services-2.0.xsd
Spring-beans.jar 대신 META-INF / spring.schemas :
http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.1.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.0.xsd=org/springframework/beans/factory/xml/spring-tool-2.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.5.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.0.xsd=org/springframework/beans/factory/xml/spring-tool-3.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.1.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/util/spring-util-2.0.xsd=org/springframework/beans/factory/xml/spring-util-2.0.xsd
http\://www.springframework.org/schema/util/spring-util-2.5.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd
http\://www.springframework.org/schema/util/spring-util-3.0.xsd=org/springframework/beans/factory/xml/spring-util-3.0.xsd
http\://www.springframework.org/schema/util/spring-util-3.1.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd
http\://www.springframework.org/schema/util/spring-util.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd
나는 혼란 스럽다. 모든 실행 파일을 하나의 실행 파일로 패키지화 할 수 있는지는 확실하지 않습니다. 이것이 그늘 - 플러그인 구성 문제인지 또는 불가능한 일을하려고하는지 알 수 없습니다. 내 수동으로 spring.schemas 파일 (다른 파일의 연결)을 수동으로 만들어야하는 것은 맞지 않을 것입니다.
나는 총을 조금 올랐을지도 모른다. 그늘 플러그인에 대한 더 많은 정보를 파헤 치면서 이전에 놓친 AppendingTransformer를 발견했습니다. 그러나, 내 관심사는 다른 파일이 같은 문제를 겪고 있는지 어떻게 알 수 있습니까? 나는이 특별한 Spring 문제를 발견했다. 비슷한 일을하고있는 다른 라이브러리에 대해서는 전혀 몰라요.
모든 제안을 부탁드립니다.
해결법
-
==============================
1.maven-shade-plugin 대신 onejar-maven-plugin을 사용하십시오. One-JAR을 사용하면 종속성 Jar와 함께 Java 응용 프로그램을 단일 실행 파일 Jar 파일로 패키지 할 수 있습니다.
maven-shade-plugin 대신 onejar-maven-plugin을 사용하십시오. One-JAR을 사용하면 종속성 Jar와 함께 Java 응용 프로그램을 단일 실행 파일 Jar 파일로 패키지 할 수 있습니다.
-
==============================
2.모든 jar의 .schema 파일 내용이 함께 추가되도록 다음 구성을 추가 할 수 있습니다.
모든 jar의 .schema 파일 내용이 함께 추가되도록 다음 구성을 추가 할 수 있습니다.
<configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration>
-
==============================
3.어제도이 문제가 발생했습니다.
어제도이 문제가 발생했습니다.
해결책은 수동 연결 및 어셈블리 플러그인 구성에서 필요한 파일을 준비하는 것입니다.
<files> <file> <source>src/META-INF/spring.schemas</source> <outputDirectory>META-INF</outputDirectory> </file> <file> <source>src/META-INF/spring.handlers</source> <outputDirectory>META-INF</outputDirectory> </file> </files> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>true</unpack> <scope>runtime</scope> <unpackOptions> <excludes> <exclude>META-INF/spring.handlers</exclude> <exclude>META-INF/spring.schemas</exclude> </excludes> </unpackOptions> </dependencySet> </dependencySets>
참고 : 하나의 항아리 접근법을 사용하는 것만으로는 충분하지 않습니다. 손으로 혼합 된 파일에 대해서는 확신 할 수 없으며, 모든 의존성을 그대로 유지하려고 시도합니다 ...
-
==============================
4.maven-assembly-plugin을 사용해 보셨습니까?
maven-assembly-plugin을 사용해 보셨습니까?
그것은 당신을 위해 의존성을 가진 하나의 jar를 생성 할 것이고, 더 나아가이 jar가 실행 가능하게 만들 수 있습니다 :
mainClass를 사용하여 실행할 클래스를 지정하십시오.
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>org.sample.App</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
-
==============================
5.
assembly plugin have issues, use below plugin <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>at.seresunit.lecturemanager_connector.App</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> you may get security exception resolve it using below configuration <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration>
from https://stackoverflow.com/questions/11160534/how-to-create-spring-based-executable-jar-with-maven by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Jackson 메시지 변환기를 사용하여 JSON 응답을 만드는 Spring 3.0 (0) | 2018.12.18 |
---|---|
[SPRING] 추가 매개 변수가있는 봄 전달? (0) | 2018.12.18 |
[SPRING] 봄 무시 무시한 콩 (0) | 2018.12.18 |
[SPRING] Spring 보안 및 Java 구성을 사용하는 사용자 정의 인증 관리자 (0) | 2018.12.18 |
[SPRING] 스프링 부트 : 임베디드 바람둥이에 다른 WAR 파일을 추가하는 방법은 무엇입니까? (0) | 2018.12.18 |