본문 바로가기
IT-개발/JAVA

java - 오래된 프로젝트의 Ant build 사용

by 로데안 2023. 4. 24.

이 글에는 슬픈 사연이 담겨져 있었는데 없었습니다.
다른 글로 보시죠..

2024.05.14 - [IT-개발/JAVA] - java - Apache Ant 빌드 사용

 

아주 오래된 소스가 있는데

수정하게 되었지만.. jar 파일로 묶어줘야하는데

이건 왜 다른 프로젝트와 다르게 build.xml(ant 빌드구성파일)이 없을까..

 

하여

추후 누군가가 이클립스로 만들어주게 될것 같아

ant 를 사용하여 빌드하도록 설정 파일을 만들어 두었다.

 

이걸 하면서 수정했던 점은

원본 소스에서도 라이브러리 내용을 풀어서 소스에 넣어둔걸... 관리하기 쉽도록 jar파일을 일일이 찾아서 넣어줌 (없는건 다른 프로젝트에서 가져옴.. 누가 이 프로젝트만 풀어 해쳐놨을까)

 

ANT 빌드하면서 마주친 문제

1. 빌드시 소스파일 인코딩 오류

2. 빌드시 library 을 찾지 못함

3. jar 파일을 같이 넣어주고 Class-Path에 library 하나하나 명시했지만 배보용 jar에서 log4j를 인식하지 못함

4. manifest에 main class를 명시했으나 찾지 못함

5. no manifiest section for signature file entry ~ 에러

 

해결

1. [빌드시 소스파일 인코딩 오류]

빌드에 사용되는 <javac> 태그에 encoding에 소스파일에 사용한 인코딩을 넣어준다.

ex ) <javac source="1.7" target="1.7" compiler="javac1.7" executable="D:/dev/java/java-se-8u42-ri/bin/javac" includeantruntime="false" srcdir="${src}" destdir="${build}" fork="yes" encoding="UTF-8">

 

2. [빌드시 library 을 찾지 못함]

<javac> 태그 사이에 <classpath>와

 

ex)  lib 라는 프로퍼티는 경로 값을 먼저 입력한 후

<classpath>
	<fileset dir="${lib}">
		<include name="**/*.jar"/>
	</fileset>
	<!-- <pathelement path="${lib}/*.jar"></pathelement> -->
</classpath>

 

3. [jar 파일을 같이 넣어주고 Class-Path에 library 하나하나 명시했지만 배보용 jar에서 log4j를 인식하지 못함]

<jar>태그 하위에

<zipgroupfileset dir="${lib}" includes="*.jar" />

나 <fileset>, <zipfileset> 등을 이용해서 배포시 jar에 라이브러리를 넣어줌

 

4,5. [manifest에 main class를 명시했으나 찾지 못함], [no manifiest section for signature file entry ~ 에러]

이건 좀 황당한 경우 였으나

<jar> 태그에 basedir 에 빌드파일 경로와 하위태그에 <fileset> 태그로 빌드파일 경로를 넣어주면 class가 중복되서 들어가 있는 형태로 생성되어 일단 jar 태그에 basedir을 제거.

 

생성된 jar파일을 실행하자

아래 같은 에러도 확인

java.lang.SecurityException: no manifiest section for signature file

생성된 jar파일에서 META-INF 에 ???.rsa 같은 보안키파일 같은 것들이 들어가있다.

이건 아마도 library를 압축해제해서 같이 넣어 주면서 같이 들어온 것 같았다.

심지어 생성된 jar 파일에서 META-INF 내부에 키 파일을 제거하고 실행하니 정상 작동확인.

 

그래서 jar 파일을 생성시 키파일을 넣지 않게 exclude 옵션을 적용하려 했지만 zipgroupfileset에서는 작동 하지 않음.

<zipgroupfileset dir="${lib}" includes="*.jar" />

부분을

<zipfileset src="lib/db2jcc4.jar">
	<exclude name="META-INF/**" />
</zipfileset>

같은 방법으로 사용 library를 하나하나 추가해주게 됨..

*.rsa 같이 확장자로 필터링해도 괜찮다.(대소문자 구분하는듯해서 위 와 같이 처리)

 

ANT빌드는 요즘은 거의 사용하지 않으니

글로 정리해두고 머리속에서 보내줘야 겠다..

 

회사 레드마인에도 적당히 적어주고..

 

참고
https://ant.apache.org/manual-1.9.x/using.html

 

Writing a Simple Buildfile

basedir the base directory from which all path calculations are done. This attribute might be overridden by setting the "basedir" property beforehand. When this is done, it must be omitted in the project tag. If neither the attribute nor the property have

ant.apache.org

stackoverflow 키워드

ant include external jar

ant build jdk version

no manifiest section for signature file entry ant

...

반응형