복붙노트

[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. ==============================

    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>
    
  2. from https://stackoverflow.com/questions/23574979/creating-an-uber-jar-with-spring-dependencies by cc-by-sa and MIT license