[SPRING] 스프링 의존성을 지닌 uber jar 만들기
SPRING스프링 의존성을 지닌 uber jar 만들기
항아리 응용 프로그램을 만들려고하지만 스프링 프레임 워크 의존성으로 인해 문제가 발생합니다. 특히 xml 스키마의 네임 스페이스는 문제가 있습니다. 악명 높은 NamespaceHandler 문제가 발생합니다.
Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/c]
개미를 사용하여 번들 jar 만들기 (단순) uber jar 만들기에 대해서는 spring jandar가 spring.handlers, spring.schemas 및 spring.tooling과 같은 파일을 포함하고 있기 때문에 스프링 종속성이있는 경우에는 작동하지 않습니다. 많은 jar 파일의 META-INF 디렉토리 네임 스페이스 해상도는 이러한 파일에 따라 다릅니다.
über 항아리는 어떻게 든 필요한 모든 파일을 포함하고있는 것처럼 보입니다.하지만 런타임에서 하나만 보이는 것 같습니다.
예를 들어, 나의 uber jar의 jar -tf는 (부분적으로)
META-INF/spring.handlers
META-INF/spring.schemas
META-INF/spring.tooling
META-INF/license.txt
META-INF/notice.txt
META-INF/spring.factories
META-INF/spring.handlers
META-INF/spring.schemas
META-INF/spring.tooling
META-INF/license.txt
META-INF/notice.txt
META-INF/license.txt
META-INF/notice.txt
META-INF/spring.handlers
META-INF/spring.schemas
META-INF/spring.tooling
META-INF/license.txt
META-INF/notice.txt
META-INF/license.txt
그래서 : 질문 .. 거기에 봄 항아리가 묶인 채로 항아리를 만드는 방법이 있습니까? META-INF 파일을 병합해야합니까? 누구나 개미 빌드와 파일 합병을 한 경험이 있습니까?
해결법
-
==============================
1.음 ..이게 고통 이었어.
음 ..이게 고통 이었어.
<target name="make-bundle" depends="jar"> <!-- retrieve the dependencies --> <ivy:retrieve conf="deploy" pattern="${dist.dir}/dependencies/[artifact].[ext]"/> <delete dir="${dist.dir}/dependencies/uber" failonerror="false" /> <mkdir dir="${dist.dir}/dependencies/uber"/> <!-- iterate over the dependencies --> <for param="file"> <path> <fileset dir="${dist.dir}/dependencies"> <include name="**/*.jar"/> </fileset> </path> <sequential> <propertyregex override="yes" property="jarname" input="@{file}" regexp=".*/([^/]*)\.jar" replace="\1"/> <!-- put the spring.* jars into special sub-directories --> <mkdir dir="${dist.dir}/dependencies/${jarname}"/> <unzip dest="${dist.dir}/dependencies/${jarname}" src="@{file}"> <patternset> <include name="**/META-INF/spring.*"/> </patternset> </unzip> <!-- put everything else in the 'uber' directory --> <unzip dest="${dist.dir}/dependencies/uber" src="@{file}"> <patternset> <exclude name="**/META-INF/spring.*"/> </patternset> </unzip> </sequential> </for> <!-- build the concatenated spring.* files --> <mkdir dir="${dist.dir}/dependencies/META-INF"/> <concat destfile="${dist.dir}/dependencies/META-INF/spring.handlers" fixlastline="true"> <fileset dir="${dist.dir}/dependencies/" includes="*/*/spring.handlers"/> </concat> <concat destfile="${dist.dir}/dependencies/META-INF/spring.schemas" fixlastline="true"> <fileset dir="${dist.dir}/dependencies/" includes="*/*/spring.schemas"/> </concat> <concat destfile="${dist.dir}/dependencies/META-INF/spring.tooling" fixlastline="true"> <fileset dir="${dist.dir}/dependencies/" includes="*/*/spring.tooling"/> </concat> <concat destfile="${dist.dir}/dependencies/META-INF/spring.factories" fixlastline="true"> <fileset dir="${dist.dir}/dependencies/" includes="*/*/spring.factories"/> </concat> <!-- build the uber jar! --> <delete file="${dist.dir}/myproject-with-dependencies.jar" failonerror="false"/> <jar destfile="${dist.dir}/myproject-with-dependencies.jar"> <!-- all dependency files except spring.* --> <fileset dir="${dist.dir}/dependencies/uber"/> <!-- the spring.* files --> <fileset dir="${dist.dir}/dependencies/" includes="META-INF/*"/> <!-- my project's classes & etc --> <zipgroupfileset dir="${dist.dir}" includes="myproject.jar" /> <manifest> <attribute name="Main-Class" value="${main.class}"/> </manifest> </jar> </target>
from https://stackoverflow.com/questions/23574979/creating-an-uber-jar-with-spring-dependencies by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Grails 2.0.4 Zip 파일 또는 JAR 매니페스트 열기 오류로 인해 Springloaded가 누락되었습니다. (0) | 2019.02.20 |
---|---|
[SPRING] 스프링 애플리케이션이 성공적으로 전개되면 코드를 실행한다. (0) | 2019.02.20 |
[SPRING] 스프링 보안 - 다중 인증 제공자 (0) | 2019.02.20 |
[SPRING] DIV 내용을 5 초마다 자동 새로 고침 코드가 작동하지 않음 (0) | 2019.02.20 |
[SPRING] Spring과 GlassFish 5에서 분산 트랜잭션 XA를 수행하는 방법은 무엇입니까? (0) | 2019.02.20 |