우선 우분투 서버 8.0.4를 다시 설치했고... 여러 가지 작업을 했는데 그 중에서 ant와 관련한 부분을 정리해봤다.
apt로 ant로 설치했는데 ant 버전은 1.7.0이었다.
sudo apt-get install sun-java5-jdk
sudo apt-get install ant
sudo apt-get install ant
ftp 태스크를 사용하려면 ANT_LIB(/usr/shared/ant/lib) 디렉토리에 다음 파일들을 추가한다.
ant-commons-net.jar
commons-net-1.4.1.jar
commons-net-1.4.1.jar
* apt로 설치하면 ant-commons-net.jar 파일이 포함되지 않기 때문에 별도로 설치해주어야 한다.
MailLogger를 사용했는데 이게 문제가 많았다. MailLogger를 사용하려면 다음과 같이 ant를 실행해야 한다.
ant -logger org.apache.tools.ant.listener.MailLogger -DMailLogger.properties.file=mail.properties
일단 어떤 문제가 있는지를 잘 알 수가 없었다. -v 옵션과 -diagnostics 옵션을 사용해야 그나마 의미있는 정보를 알 수가 있었다.
그리고 메일 발송을 위해서 다음 파일들을 추가해야 했다.
mail.jar
activation.jar
activation.jar
이 파일들을 먼저 설치하지 않으면 무슨 문제가 있는지 알 수가 없다. 이 파일들이 필요하다는 메시지가 없었다.
설정을 별도의 파일(mail.properties)에 해야 했다. 그렇지 않으면 예외가 발생한다.
# mail.properties
# gmail을 사용
MailLogger.mailhost=smtp.gmail.com
MailLogger.port=465
MailLogger.ssl=true
MailLogger.user=mailer@company.com
MailLogger.password=password
MailLogger.from=mailer@company.com
MailLogger.success.to=to@company.com
MailLogger.success.subject=Build Success
MailLogger.failure.to=admin@company.com,builder@company.com
MailLogger.failure.subject=Build Failure
# gmail을 사용
MailLogger.mailhost=smtp.gmail.com
MailLogger.port=465
MailLogger.ssl=true
MailLogger.user=mailer@company.com
MailLogger.password=password
MailLogger.from=mailer@company.com
MailLogger.success.to=to@company.com
MailLogger.success.subject=Build Success
MailLogger.failure.to=admin@company.com,builder@company.com
MailLogger.failure.subject=Build Failure
이후에도 java.lang.NullPointerException이 발생한다. 예외가 발생하는 소스 코드 위치는 다음과 같다.
org.apache.tools.ant.taskdefs.email.MimeMailer.java 206번째 줄
for (Iterator iter = headers.iterator(); iter.hasNext();) {
Header h = (Header) iter.next();
msg.addHeader(h.getName(), h.getValue());
}
for (Iterator iter = headers.iterator(); iter.hasNext();) {
Header h = (Header) iter.next();
msg.addHeader(h.getName(), h.getValue());
}
headers는 상위 클래스(Mailer.java)에 있는 멤버 필드인데 null로 초기화가되어 있다.
그래서 이 코드를 다음과 같이 수정해야 한다.
if (headers != null) {
for (Iterator iter = headers.iterator(); iter.hasNext();) {
Header h = (Header) iter.next();
msg.addHeader(h.getName(), h.getValue());
}
}
for (Iterator iter = headers.iterator(); iter.hasNext();) {
Header h = (Header) iter.next();
msg.addHeader(h.getName(), h.getValue());
}
}
그리고 이 코드만을 컴파일하여 _ant.jar 파일로 묶어서 ANT_LIB 디렉토리에 복사한다.
* 이클리스에서 사용하는 ant 버전은 1.7.1이었는데 여기서도 동일한 예외가 발생했다.
No comments:
Post a Comment