개미로 번들 항아리 만들기
일부 Java 프로젝트를 빌드하기 위해 Ant를 사용하고 있습니다.
일부에서는 lib/
JAR 파일의 형식으로 외부 종속성을 포함 하는 디렉토리가 있습니다.
빌드하는 동안 디렉토리의 zipfileset
각 jar에 대한 번들 jar 파일 a에 추가하여 종속성과 함께 프로젝트의 코드를 포함하는 번들 jar를 만듭니다 lib/
.
문제는 항아리를 추가하거나 이름을 변경할 때마다 build.xml
파일 을 업데이트해야 zipfilesets
한다는 것입니다. 특정 패턴의 모든 항아리를 포함하는 자동 방식으로 파일을 추가하는 방법을 찾을 수 없었기 때문 입니다 ( 예 lib/*.jar
).
이 작업을 수행하는 더 좋은 방법이 있습니까?
이 작업을 위해 Ant Task를 작성하거나 Groovy의 ant API를 사용하여 프로그래밍 방식으로 수행하는 것을 고려했지만 "바닐라"ant를 사용하여이 작업을 수행 할 수있는 방법이 있는지 궁금합니다.
내 목표에는 다음과 같은 것이 있습니다.
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar" excludes=""/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Class-Path" value="${mf.classpath}"/>
</manifest>
</jar>
그리고 여기에 내 클래스 경로를 만드는 방법이 있습니다.
<path id="build.classpath">
<fileset dir="${basedir}/">
<include name="${lib.dir}/*.jar"/>
</fileset>
</path>
<pathconvert property="mf.classpath" pathsep=" ">
<path refid="build.classpath"/>
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="lib/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>
mf.classpath는 위에 게시 된 패키지 대상에서 사용됩니다. 이 부분은 다른 곳에서 복사했기 때문에 익숙하지 않습니다.
빠른 편집. Javac은 이러한 항아리에 대해서도 알아야합니다.
<path id="jars">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<target name="compile">
<mkdir dir="${build.dir}"/>
<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="jars" debug="on"/>
</target>
를 사용합니다 zipgroupfileset
. 예를 들면 :
<target name="jar">
<jar destfile="foo.jar" basedir="${dir.classes}">
<zipgroupfileset dir="lib" includes="*.jar"/>
</jar>
</target>
는 zipgroupfileset
함께 설명되어 우편 작업.
NetBeans를 사용하는 사람들을 위해 zipgroupfileset을 사용하여 번들로 제공되는 라이브러리로 JAR 아카이브를 만드는 방법은 다음과 같습니다.
<target name="-post-jar">
<property name="store.jar.name" value="MyJarName"/>
<property name="store.dir" value="dist"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
<delete dir="${store.dir}/lib"/>
<delete file="${store.dir}/README.TXT"/>
</target>
이 대상 정의를 build.xml 파일 끝에 추가했습니다. 대상 이름은 -post-jar입니다.
Here's an simple example of an ant target that will create a jar (named test.jar) that includes all jar files under the lib directory. Maybe this will solve your problem?
<target name="jar">
<jar destfile="test.jar">
<fileset dir="lib/" includes="**/*.jar" />
</jar>
</target>
참고URL : https://stackoverflow.com/questions/1821803/creating-a-bundle-jar-with-ant
'developer tip' 카테고리의 다른 글
.Net의 NotSupportedException에 해당하는 Java (0) | 2020.11.28 |
---|---|
Scala에서 기호를 사용하는 실용적인 예? (0) | 2020.11.28 |
Objective-C에서 typeof, __typeof 및 __typeof__의 차이점 (0) | 2020.11.28 |
요소 유형의 하위가 아닌 CSS 선택자? (0) | 2020.11.28 |
웹 페이지의 특정 부분에 연결 (0) | 2020.11.28 |