'ant'에 해당되는 글 16

  1. 2012.08.13 [Ant] Jar Task
  2. 2012.04.30 [Ant] Unable to find a javac compiler
  3. 2012.03.16 [Ant] 'includeantruntime' was not set
  4. 2011.08.15 NetBeans에서 실행하는 build.xml 이름 변경하기
  5. 2011.01.01 [IBM dWs] Java SE 6, Ecipse, Ant 를 이용한 간단한 웹 서비스
  6. 2010.08.19 FindBugs에서 버그가 발견된 소스의 라인을 찾지 못하는 경우
  7. 2010.08.17 FindBugs
  8. 2010.08.16 Eclipse에서 Ant로 HSQLDB 사용하기
  9. 2010.05.24 com.sun.tools.javac.Main is not on the classpath.
  10. 2010.01.10 Ant에서 Tomcat Application 실행시키키
  11. 2010.01.10 Developing a Spring Framework MVC application step-by-step 예제 실행하기
  12. 2010.01.09 [해석] Developing a Spring Framework MVC application step-by-step Chapter 1. Basic Application and Environment Setup
  13. 2009.10.06 Subversion에서 소스만 가져오기
  14. 2009.07.26 Derby 구동 Ant 스크립트
  15. 2009.07.25 [IBM dWs] SchemaSpy - 데이터베이스 문서화하기
  16. 2009.07.07 Eclipse에서 Ant사용하기

[Ant] Jar Task

- jar로 패키징하고 실행시킨다.



- EJB에서 사용할 모듈을 패키징한다.


Eclipse Export 기능에서는 dist/PORTAL-INF/classes/123.txt 를 제일 상단에 위치시키지 못한다.

(디렉토리 구조 그대로 패키징한다.)

그래서 dist/PORTAL-INF/classes/123.txt 를 프로젝트 root에 복사해 두고 패키징했는데 관리하기가 번거롭다.


Export 기능은 너무 번잡해서 Ant를 사용함.


- Zip task도 비슷함.


[Ant] Unable to find a javac compiler

BUILD FAILED
D:\web_dev\ant_build2.xml:16: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre6"
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_22


[Ant] 'includeantruntime' was not set

warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

javac 태스크에 includeantruntime을 false로 둔다.
이 옵션은 ant의 클래스 패스를 포함시킨다는 의미이다.

NetBeans에서 실행하는 build.xml 이름 변경하기

NetBeans에서 Ant를 이용하는데 문제는 build.xml을 다른 IDE에서도 사용하는데....

ant 실행시 -f 옵션을 이용하면 될거 같은데....없네.
ant -buildfile build.xml
-D 옵션으로 기본 파일명을 바꿀수는 없는지...

TestWebapp\nbproject\project.properties

이걸 변경해주면 된다.

checkout 시 build.xml 이 있으면 넷빈즈에서 생성하는 build.xml 이름을 변경할 수 있도록 해준다.

[IBM dWs] Java SE 6, Ecipse, Ant 를 이용한 간단한 웹 서비스

- Eclipse와 Java SE 6을 사용하여 독립형 웹 서비스 개발하기, Part 1: 웹 서비스 서버 애플리케이션
Create stand-alone Web services applications with Eclipse and Java SE 6, Part 1: The Web service server application
- Eclipse와 Java SE 6을 사용하여 독립형 웹 서비스 개발하기: Part 2: 웹 서비스 클라이언트 응용프로그램
Create stand-alone Web services applications with Eclipse and Java SE 6: Part 2: The Web service client application

- Java SE 6, Ecipse, Ant 를 이용해서 간단한 웹서비스를 구현하고 모니터링한다.

Java SE 6 JDK 설치
Eclipse JRE 설정

서버
Ant 를 실행시키면 com.myfirst.wsServer.jaxws 가 생김 서버를 실행시키고, Internal Web Browser 로 http://localhost:8080/wsServerExample?wsdl 을 입력하면 WSDL 을 볼 수 있다.

Eclipse 의 Web Services Explorer 를 이용해서 웹서비스를 테스트해 볼 수 있다.
Java EE Perspective 에서 Run - Launch the Web Services Explorer 을 선택하고
http://localhost:8080/wsServerExample?wsdl 를 호출해서 getGreeting 을 직접 호출해 본다.

클라이언트
wsimport 태스크를 실행하면 WSDL 를 참조해서 JAX-WS 관련 스텁?이 생성된다.
  • wsgen은 서비스 엔드 포인트 클래스를 읽고서 웹 서비스 전개 및 호출에 필요한 모든 아티팩트를 생성한다.
  • wsimport는 WSDL을 읽고서 웹 서비스 개발, 전개 및 호출에 필요한 모든 아티팩트를 생성한다.

- Eclipse TCP/IP Monitor 를 이용해서 모니터링을 할 수 있다.

FindBugs에서 버그가 발견된 소스의 라인을 찾지 못하는 경우


컴파일시 디버깅 정보가 들어가지 않아서 그렇다.
Ant를 사용한다면 컴파일시 debug를 yes로 둔다.

<javac destdir="${classes.dir}" srcdir="${source.dir}"
    classpathref="master.classpath" includeantruntime="false"
    debug="yes"
/>

- 이거 해결하려고 클래스 파일을 비교해 봤다.

FindBugs

- http://findbugs.sourceforge.net/

- 어플리케이션으로 직접 실행시키기
findbugs-1.3.9> java -jar lib/findbugs.jar
- or -
findbugs-1.3.9/bin/findbugs.bat 실행

프로젝트를 만들고 클래스, 부가적으로 사용되는 클래스, 소스 위치를 지정한다.

특정 패키지의 클래스만 분석하는 경우 패키지를 지정하고 소스는 루트 디렉토리로 지정해야 한다.
(소스도 특정 패키지로 지정하면 제대로 안나옴)

찾지 못한 클래스는 콘솔에 나온다.
Auxillary class locations에 포함시켜준다.

- 이클립스 플러그인
개발중에 사용하면 좋을거 같다.
플러그인이 싫다면 GUI 를 이용해서 확인하도록 할 것.

- Ant 로 실행시키기
findbugs.home=D:/resources/programs/java/findbugs-1.3.9/

devlib/에 findbugs-ant.jar를 넣어둔다.[각주:1]

  1. 2012-03-18 findbugs/lib/ 를 클래스패스에 포함시켰으므로 이 작업은 더이상 필요없다. [본문으로]

Eclipse에서 Ant로 HSQLDB 사용하기

간단한 테스트 데이터베이스로 사용하기에 이놈보다 좋은게 어디있겠냐.
예전 Tutorial에서 가져옴.
원출처는 여기
devlib.dir=res/devlib

db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:hsql://localhost
db.name=baseball
db.username=sa
db.password=

com.sun.tools.javac.Main is not on the classpath.

Eclipse에서 Ant로 빌드하는데 발생한 에러

com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre6"
- JAVA_HOME을 지정하거나 , PATH에 JDK/bin/을 추가했는데 안됨. [각주:1]

- Ant 설정의 Runtime - Classpath에 tools.jar를 추가한다.
tools.jar를 jre/lib/ext/에 두라고 하는데 글쎄....이클립스 환경은 클래스패스가 별도로 가지 않나?

- build.xml에 사용될 컴파일러를 명시적으로 지정할수가 있다고 한다. 근데 이건 좀 아닌듯. 이클립스에 종속됨. [todo] 예전에 모시스템 테스트계에서 발생했던 에러는?
  1. 지금 생각해보니 이클립스를 재시작 안했다. 윽...그래도 아래 방법이 제일 나은거 같다. [본문으로]

Ant에서 Tomcat Application 실행시키키

- build.xml

- build.properties
appserver.home=E:/resources/programs/java/apache-tomcat-6.0.18
appserver.lib=${appserver.home}/lib
deploy.path=${appserver.home}/webapps

tomcat.manager.url=http://localhost:8080/manager
tomcat.manager.username=tomcat
tomcat.manager.password=s3cret

- appserver.home/conf/tomcat-users.xml

- 확인
$ ant list
Buildfile: build.xml

list:
     [list] OK - Listed applications for virtual host localhost
     [list] /springapp:running:0:springapp
     [list] /manager:running:0:manager
     [list] /:running:0:ROOT
     [list] /docs:running:0:docs
     [list] /examples:running:0:examples
     [list] /host-manager:running:0:host-manager

BUILD SUCCESSFUL
Total time: 3 seconds

출처 : Developing a Spring Framework MVC application step-by-step

Developing a Spring Framework MVC application step-by-step 예제 실행하기

이클립스에서 실행하기
- Dynamin Web Project로 만든다.
컴파일이 자동으로 되고, 클래스패스를 자동으로 잡아준다.

- Ant는 Outline View에서 실행시킨다.
[todo] 필요없는 target 지우기, 그러나 테스트서버에서는 필요하다. 필요한 target만 여기 적어놔.

- Tomcat은 Server View를 이용한다.

- Test는 단축키(@~x, t)를 이용한다.

IDE 사용하지 않고 실행하기
- Ant를 이용한다.

[해석] Developing a Spring Framework MVC application step-by-step Chapter 1. Basic Application and Environment Setup

http://web.archive.org/web/20161119155731/http://docs.spring.io/docs/Spring-MVC-step-by-step/part1.html

Chapter&nbsp;1.&nbsp;Basic Application and Environment Setup.pdf


1장. 기본 어플리케이션 및 환경설정

1.1. 프로젝트 디렉토리 생성

모든 소스와 작성할 파일을 저장할 디렉토리를 springapp/라고 하자.
자바소스를 저장할 src/를 만든다.
어플리케이션을 패키징하고 배포할 WAR에 들어갈 모든 파일을 저장할 war/를 만든다.
war/에는 자바소스를 제외한 JSP 소스, 설정파일이 저장된다.

1.2. index.jsp 작성하기

아주 간단한 index.jsp를 war/에 작성하자.
index.jsp는 우리가 만드는 어플리케이션의 시작점이 된다.
'springapp/war/index.jsp': war/에 WEB-INF/를 만들고 WEB-INF/ 아래에 web.xml을 만든다.
'springapp/war/WEB-INF/web.xml':
1.3. Tomcat에 배포하기

이 Tutorial에서 계속 사용될 Ant 빌드 스크립트를 만들자.
이 빌드 스크립트에는 컴파일, 빌딩, 배포하는 타겟이 있고, 일부는 특정 서버에만 사용되는 것도 있다.
'springapp/build.xml': Tomcat이 아닌 다른 WAS를 사용한다면 빌드 스크립트 마지막 부분은 지워도 된다.
WAS의 hot deploy 특성에 따르거나, 직접 서버를 내렸다 올려야 한다.

IDE를 사용한다면 build.xml의 Tomcat 타겟에 에러 표시가 보일지도 모르는데 무시해도 된다.

Ant 빌드 스크립트가 개발을 좀더 쉽게 할 수 있게 도와 줄것이다.
여기에 사용된 대부분의 내용은 Ant나 Tomcat의 기본적인 내용이므로 자세한 설명은 생략한다.
빌드 파일 내용을 springapp/에 build.xml에 넣기만 하면 된다.
그리고 같은 위치에 build.properties를 만들고 서버가 설치된 위치를 맞춘다.
'springapp/build.properties':
# Ant properties for building the springapp

appserver.home=${user.home}/apache-tomcat-6.0.14
# for Tomcat 5 use $appserver.home}/server/lib
# for Tomcat 6 use $appserver.home}/lib
appserver.lib=${appserver.home}/lib

deploy.path=${appserver.home}/webapps

tomcat.manager.url=http://localhost:8080/manager
tomcat.manager.username=tomcat
tomcat.manager.password=s3cret

당신이 시스템에 Tomcat을 설치하지 않았다면 Tomcat 소유주가 appserver.home/webapps/에 대해 모든 권한을 줘야 한다.
또는 소유주가 appserver.home/webapps/springapp/를 만들고 이 디렉토리에 모든 권한을 줘야 한다.
리눅스에서는 chmod a+rwx springapp 라는 명령어를 사용하면 모든 사용자에게 모든 권한을 줄수 있다.

'appserver.home/conf/tomcat-users.xml'에 사용자를 추가한다. 이제 모든 준비가 다 되었고 springapp/에서 ant 명령을 실행시킨다.
빌드하거나 배포하려면 deploy나 deploywar 타겟을 실행시킨다.

1.4. 어플리케이션 확인

${appserver.home}/bin/startup.bat 을 실행시켜서 Tomcat을 시작하자.
Tomcat이 우리가 만든 어플리케이션을 올렸는지 list 태스크로 확인할 수 있다.

브라우저로 http://localhost:8080/springapp/index.jsp을 열어보자.

1.5. Spring 프레임워크 다운로드

Spring Framework 2.5를 다운로드 받고 적당한 곳에 압축을 푼다.

1.6. web.xml 수정

springapp/war/WEB-INF/web.xml을 수정한다.
Front Controller인 DispatcherServlet을 설정한다.
나중에 설정할 정보에 기반하여 보내질 모든 요청을 처리한다.
이 서블릿 정의는 servlet-mapping 엔트리로 여기서 사용될 URL 패턴을 매핑한다.
우리는 htm 확장자를 가진 모든 URL을 springapp 서블릿으로 보내도록 설정한다.
'springapp/war/WEB-INF/web.xml':

springapp-servlet.xml을 springapp/war/WEB-INF/에 만든다.
이 파일은 DispatcherServlet에서 사용되는 빈에 대한 정의를 한다.
모든 웹 관련 컴포넌트가 사용할 WebApplicationContext이다. =-=> ???
이 파일의 이름은 web.xml 의 servlet-name 엘리먼트에 -servlet을 붙여서 만든다.
이것은 Spring Web MVC 프레임워크의 표준 명명법이다.
이제 /hello.htm 에 대한 빈을 설정하고 class는 springapp.web.HelloController로 하자.
이것은 /hello.htm 이라는 URL에 대한 요청을 controller가 처리하게 한다.
Spring Web MVC 프레임워크는 요청 URL과 처리할 객체를 매핑하는데 HandlerMapping 인터페이스 구현체를 사용한다.
DispatcherServlet과 달리 HelloController는 특정 페이지에 대한 요청을 처리한다.(Fowler는 이것을 Page Controller라고 한다.)
DispatcherServlet이 사용하는 기본적인 HandlerMapping은 BeanNameUrlHandlerMapping이다.
이 클래스는 빈이름을 요청의 URL과 매핑해서 DispatcherServlet이 어떤 컨트롤러를 호출할지 알려준다.
'springapp/war/WEB-INF/springapp-servlet.xml':

1.7. WEB-INF/lib에 라이브러리 복사하기

war/WEB-INF/lib/를 만들고 Spring 배포본에서 spring.jar, spring-webmvc.jar, commons-logging.jar를 복사해 넣는다.
이 라이브러리는 서버에 배포되고 빌드에 사용된다.

1.8. Controller 만들기

springapp.web 패키지에 HelloController를 만든다.
src/springapp/web/에 HelloController.java를 만든다.
'springapp/src/springapp/web/HelloController.java':

이것은 아주 기본적인 Controller 구현이다.
우리는 나중에 Spring에서 제공하는 Controller 구현체를 구현해서 확장할 것이다.
Spring Web MVC에서 Controller는 요청을 처리하고 ModelAndView를 리턴한다.
이 경우에는 hello.jsp이다.
이렇게 리턴한 모델은 ViewResolver에 의해서 수행된다.
우리는 명시적으로 ViewResolver를 지정하지 않았기 때문에 Spring에 기본적으로 제공된다.(view 이름에 해당하는 URL로 포워딩한다.)
이 핸들러로 실제로 요청이 왔는지 로거를 찍어본다.
Tomcat을 사용하면 로그가 appserver.home/log/catalina.out에 출력된다.

IDE를 사용하면 lib/의 jar파일을 빌드 패스에 추가해야 한다.
서블릿 컨테이너의 servlet-api.jar도 추가해야 HelloController.java가 제대로 컴파일된다.

1.9. Controller에 테스트 작성하기

테스트는 소프트웨어 개발에 있어서 필수적이다.
애자일 개발에 있어서도 핵심 practice이다.
controller에 복잡한 로직을 넣기 전에 테스트를 작성한다.
테스트는 개발이 진행됨에 따라 변경에 대한 신뢰를 줄수 있다.
springapp/ 아래에 test/를 만들어서 테스트를 작성한다.

HelloControllerTests 테스트 클래스를 만들고 JUnit의 TestCase를 상속한다.
단위 테스트는 handleRequest()가 리턴하는 뷰이름이 hello.jsp인지 확인한다.
'springapp/test/springapp/web/HelloControllerTests.java':

테스트를 실행시키려면, build.xml에 테스트 태스크를 추가한다.
우선 junit.jar를 복사해서 넣는다.
테스트를 컴파일하고 실행시키는 태스크를 하나로 두는 대신 buildtests와 tests로 나눈다.
springapp/resourcs/devlib/를 두고 여기에 junit.jar를 넣는다.

build.xml에 다음의 내용을 추가한다.
<property name="resources.dir" value="resources"/>
<property name="devlib.dir" value="${resources.dir}/devlib"/>
...
<path id="devlib-classpath">
    <fileset dir="${devlib.dir}">
        <include name="*.jar"/>
    </fileset>
</path>

buildtests, tests 타겟에 <classpath refid="devlib-classpath"/>를 추가한다.

IDE에서 테스트를 실행시키려면 junit.jar를 빌드 패스에 추가한다.
'springapp/build.xml':

애자일의 또다른 practice는 지속적인 통합이다.
빌드할 때마다 테스트를 실행시켜서 개발이 진행되면서 어플리케이션이 제대로 동작하는지 확인할 수 있다.

1.10. View 작성하기

이미 앞에 언급된대로 hello.jsp로 포워딩한다.
war/에 둔다.
'springapp/war/hello.jsp':

1.11. 어플리케이션 컴파일, 배포

depoy 타겟을 실행시키고 reload 타겟을 실행시키면 빌드하고 Tomcat을 리로드한다.
Ant 출력과 Tomcat 로그를 확인한다.

1.12. 어플리케이션 테스트

브라우저로 http://localhost:8080/springapp/hello.htm 으로 들어가본다.

1.13. 요약

  • 설정이 제대로 되었는지 확인하기 위해 index.jsp를 만들었다. 나중에 실제 링크가 있는 페이지로 만들것이다.
  • DispatcherServlet과 springapp-servlet.xml
  • 지금은 단순히 ModelAndView만 리턴하는 HelloController. 나중에 model을 구현한다.
  • 뷰이름을 검증하기 위한 HelloControllerTests
  • 아주 간단한 hello.jsp



Subversion에서 소스만 가져오기



Derby 구동 Ant 스크립트

> java -jar derbyrun.jar server start | stop

[IBM dWs] SchemaSpy - 데이터베이스 문서화하기

- 사람을 위한 자동화: 전자동 문서화

- SchemaSpy - Graphical Database Schema Metadata Browser

- Graphviz 가 필요함.
이클립스를 사용하면 설치후 이클립스 재시작 필요
재시작하지 않으면 PATH에 추가된 Graphviz를 Ant로 실행시키지 못한다.

- Ant
- 실행 옵션
  • -s : SQL Server 2005에서는 테이블명이 dbo.TABLE로 되어 있음. dbo로 지정해야 함.
  • -i : TB.* 는 TB로 시작하는 테이블/뷰만을 대상으로 한다.
  • -cp : path 태그는 안되고 property로 해야 함. 드라이버 위치를 지정해 준다.
  • -charset : 지정하지 않으면 한글이 깨짐
- 뷰도 보임
그러나 다른 데이터베이스 개체는 안보임.

Eclipse에서 Ant사용하기

- 이클립스를 사용한 앤트 활용법 (한글)

- 이클립스의 Ant Editor 기능
  • 코드 하이라이트(highlighting)
  • 코드 완성(code completion)
  • 접기(folding)
  • 이름 변경(renaming) : 여러 곳에 사용된 변수(?)를 한번에 수정해준다.
  • 발생한 문제 해결(marking occurrences and problems)

- 디버깅 기능

- Ant Builder
파일저장시 컴파일이 되는 것은 Java Builder 를 사용하기 때문인데, 빌더를 Ant Builder로 지정할 수도 있다.

파일 저장시 컴파일을 하고 jar파일을 생성하는 작업이 자동으로 처리되게 할 수 있다.
native2ascii를 매번 실행할 수도 있고[각주:1]

[todo] 다시 해볼것.(오늘 수정한 파일만 목록으로 만들기, 또는 별도 디렉토리에 넣기)
  1. Properties Editor를 사용하면 되긴 하지만. [본문으로]