개미에서 에서 매니페스트 클래스 경로를 생성하십시오
문제
아래 빌드 파일에서 JAR 대상은 Manifest 클래스 경로의 Jar.class.path 속성을 나타냅니다. 컴파일 대상은 project.class.path를 나타냅니다
jar.class.path 및 project.class.path가 매우 유사하기 때문에 여기에는 중복성이 있습니다. 라이브러리가 추가 될 때 두 업데이트해야합니다. 라이브러리 목록이 매우 길어지면 통증이 될 수 있습니다. 더 좋은 방법이 있습니까? 모든 솔루션은 교차 플랫폼이어야하며 항상 상대 경로를 사용해야합니다.
편집하다:
다른 방법이 아닌 파일 세트에서 Jar ClassPath를 생성해야하므로 와일드 카드를 사용하여 모든 JAR 파일을 디렉토리에 포함시킬 수 있습니다.
<?xml version="1.0"?>
<project name="Higgins" default="jar" basedir=".">
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<target name="prepare">
<mkdir dir="build"/>
</target>
<target name="compile" depends="prepare" description="Compile core sources">
<javac srcdir="src"
includes="**"
destdir="build"
debug="true"
source="1.5">
<classpath refid="project.class.path"/>
</javac>
</target>
<target name="jar" depends="compile" description="Generates executable jar file">
<jar jarfile="higgins.jar">
<manifest>
<attribute name="Main-Class" value="nl.helixsoft.higgins.Main"/>
<attribute name="Class-Path" value="${jar.class.path}"/>
</manifest>
<fileset dir="build" includes="**/*.class"/>
<fileset dir="src" includes="**/*.properties"/>
</jar>
</target>
</project>
해결책
개미 1.7 이상을 가정하면 매니페스트 클래스 경로 직무.
<path id="dep.runtime">
<fileset dir="./lib">
<include name="**/*.jar" />
</fileset>
</path>
<property name="dep_cp" value="${toString:dep.runtime}" />
<target name="default">
<manifestclasspath property="manifest_cp" jarfile="myjar.jar">
<classpath refid="dep.runtime" />
</manifestclasspath>
<echo message="Build Classpath: ${dep_cp}" />
<echo message="Manifest Classpath: ${manifest_cp}" />
</target>
다른 팁
<path id="build.classpath">
<fileset dir="${basedir}">
<include name="lib/*.jar"/>
</fileset>
</path>
<pathconvert property="manifest.classpath" pathsep=" ">
<path refid="build.classpath"/>
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.jar" to="lib/*.jar"/>
</chainedmapper>
</mapper>
</pathconvert>
<target depends="compile" name="buildjar">
<jar jarfile="${basedir}/${test.jar}">
<fileset dir="${build}" />
<manifest>
<attribute name="Main-Class" value="com.mycompany.TestMain"/>
<attribute name="Class-Path" value="${manifest.classpath}"/>
</manifest>
</jar>
</target>
자세한 내용은 확인하십시오 이 기사.
두 가지 (또는 그 이상) 경로 사이에 공통 하위 경로를 공유하려는 경우 쉽게 수행 할 수 있습니다.
<path id="lib.path>
<fileset dir="lib">
<include name="forms-1.2.0.jar"/>
<include name="BrowserLauncher.jar"/>
</fileset>
</path>
<path id="project.class.path">
<pathelement location="build"/>
<path refid="lib.path"/>
</path>
<property name="jar.class.path" refid="lib.path"/>
편집하다 죄송합니다. 질문을 오해했습니다. 이 시도:
<property name="jar.class.path" value="lib/forms-1.2.0.jar lib/BrowserLauncher.jar"/>
<path id="project.class.path">
<pathelement location="build"/>
<fileset dir="." includes="${jar.class.path}"/>
</path>
당신이 사용할 수있는u003Cpathconvert> 파일 세트를 포함 할 수있는 경로를 일반 문자열로 변환합니다. 당신은 필요할 것입니다u003Cecho> 해당 문자열은 파일에 사용하십시오u003Creplace> 또는u003Creplaceregexp> 선행 경로 비트를 자르려면 마침내u003Cloadfile> 조작 된 문자열을 최종 속성에로드합니다.
구현은 독자에게 연습으로 남았습니다.
제휴하지 않습니다 StackOverflow