gradle1 기초
빌드 자동화 툴로 요즘은 Maven 보다 gradle이 대세라고 한다... 그래서 어떻게 쓰는지 한 번 알아봤다. 덤으로 이클립스 대신 Visual Studio Code로 java 개발하는 것도 알아봤다.
이클립스는 너무 느려서 답답하다.
VC는 대신 초반에 설정해 줘야 할 것들이 많아 귀찮긴 하다.
gradle 설치
- gradle을 다운로드 받아 설치 (압축해제)
- 환경변수 PATH에 bin 폴더를 걸어둔다.
- gradle -v ; 버전 확인. 잘 실행되는지 확인.
HelloWorld
프로젝트 폴더를 생성한다.
-프로젝트 폴더 생성
mkdir hello
cd hello
-프로젝트 초기화
gradle init --type java-application
폴더들이 생성된다. (.gradle, app, gradle 등등)
-빌드
gradle compilejava
-실행
gradle run
실행관련 정보와 결과가 출력됨.
gradle run -q
quiet 모드. 실행 결과만 출력됨.
-라이브러리로 만들기
gradle jar
-build 폴더 삭제
gradle clean
- DOS에서 디렉터리 구조를 보려면 tree 를 사용하면 된다. /f 옵션을 주면 파일목록도 나옴.
- 초반에 빠르게 구조 파악에 도움이 된다.
프로젝트 초기화
gradle init --type java-application
- init type
- basic (디폴트임)
- java-application
- App.java 가 기본 main 클래스.
- java-library
- jar 파일 생성용.
- main 클래스가 없음.
- groovy-application
- pom
- 기존 Maven 프로젝트를 마이그레이션한다
Tasks
gradle tasks
gradle 커맨드 목록, 도움말이 나옴.
init, jar, clean, run, 등등 모두가 Task임.
- 태스크는 사용자 정의로 추가가 가능하다.
- app 폴더 안의 build.gradle 파일에 정의하면 된다.
task hello {
println 'hello gradle'
doLast {
println 'bye~'
}
doFirst {
println 'first line.'
}
}
gradle tasks --all
app:hello 가 생겼다.
gradle -q hello ; 실행
- 자세한건 groovy 문법을 알아야 한다.
웹 어플리케이션
mkdir helloweb
cd helloweb
gradle init --type java-application
(중간 경로를 자동으로 만들어줌.)
mkdir app\src\main\webapp\WEB-INF\views
copy con app\src\main\webapp\WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
</web-app>
^Z
mkdir app\src\main\java\test
copy con app\src\main\java\test\TestServlet.java
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException {
process(request, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException {
process(request, response);
}
public void process(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException {
PrintWriter out = response.getWriter();
request.getRequestDispatcher("/WEB-INF/views/test.jsp").forward(request, response);
}
}
^Z
copy con app\src\main\webapp\WEB-INF\views\test.jsp
<html>
<body>
<h1>Hello Gradle!!</h1>
</body>
</html>
^Z
copy con app\src\main\webapp\index.jsp
<html>
hello world.... index.
<p>
context path: ${pageContext.request.contextPath}
</p>
</html>
^Z
- 이제 빌드 설정
- war 기능 추가. gretty는 경량웹서버 기능의 플러그인.
notepad app\build.gradle
build.gradle 파일을 열고 아래와 같이 작성.
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'gretty'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath group:'org.akhikhl.gretty', name:'gretty-plugin', version:'+'
}
}
repositories {
jcenter()
}
dependencies {
testCompile group:'junit', name:'junit', version:'4.12'
}
==> deprecated.... 너무 옛날거라 이 방식이 안 돌아간다...
수정 필요...!!
- 배포
gradle war
VS Code 로 개발하기
위 작업한 폴더를 연다.
java 파일을 열면, java 확장을 설치하라고 뜬다. 설치.
확장프로그램 설치
Code Runner
Ant Target Runner
Log Viewer
Sort lines
Rainbow
VC 설정
settings.json (^+, 단축키. 오른쪽에 json으로 보기.)
java 경로는 환경에 맞게 설정
{
"editor.fontFamily": "D2Coding, Consolas, 'Courier New', monospace",
"editor.renderWhitespace": "all",
"editor.insertSpaces": false,
"workbench.colorTheme": "Default Dark+",
"editor.suggestSelection": "first",
"vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true,
".gradle":true,
"app/tomcat.8080":true
},
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
"**/*.code-search": true,
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true,
".gradle":true,
"app/tomcat.8080":true
},
"window.titleBarStyle": "custom",
"window.title": "${dirty}${activeEditorMedium}${separator}${rootName}",
"java.home":"C:\\Program Files\\Java\\jdk-14.0.2"
}
.gitignore 설정
**/.classpath
**/.project
**/.settings
**/.factorypath
.gradle
app/tomcat.8080
app/bin
app/build
*.swp
*.sublime-project
*.sublime-workspace
Save As WorkSpace로 workspace를 저장하고 VC 재시작.
Add Folder to Workspace로 워크스페이스에 다른 프로젝트 들을 추가할 수 있다.
주의!
첫 번째 프로젝트로 위치해야 좋다?
프로젝트명을 선택하여 가장 위에 WORKSPACE 왼쪽 아래화살표 밑으로 드래그하면 첫번째로 이동된다.
build.gradle
- 설정이 까다롭다....
- 버전이 틀리면 실패.. 예전 버전으로 설정하니 에러가 발생해서 버전을 올리니까 돌아감.. :-(
plugins {
id 'war'
id 'org.gretty' version '3.0.5'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
compileOnly 'javax.servlet:javax.servlet-api:4.0.1'
compileOnly 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.3'
// This dependency is used by the application.
implementation 'org.apache.logging.log4j:log4j-api:2.13.1'
implementation 'org.apache.logging.log4j:log4j-core:2.13.1'
annotationProcessor 'org.apache.logging.log4j:log4j-api:2.13.1'
annotationProcessor 'org.apache.logging.log4j:log4j-core:2.13.1'
gretty 'org.apache.tomcat:tomcat-dbcp:9.0.13'
}
gretty {
servletContainer = 'tomcat9'
httpPort=8080
contextPath = '/helloweb'
enableNaming = true
}
라이브러리 의존성 확인시 위 사이트에서 검색하여 버전을 맞춘다.
gradlew tasks
tomcat관련 명령어들이 추가된 것을 알 수 있다.
gradlew tomcatrun
에러가 없어야 하는데.... 잘 되네요.
http://localhost:8080/helloweb
index.jsp 가 구동됨.
http://localhost:8080/helloweb/test
서블릿 구동됨. (TestServlet.java → views/test.jsp )
VC 작업 만들기
Terminal - configure task - tasks.json을 생성한다.
템플릿은 MSBuild 기본형으로 선택.
create tasks.json 메뉴가 안보이면, 이미 있어서 그렇다. .vscode 폴더에 tasks.json. (삭제하고 다시 만들면 된다.)
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Tomcat Start",
"type": "shell",
"command": "${workspaceRoot}/gradlew tomcatStart",
"problemMatcher": "$msCompile",
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Tomcat Debug",
"type": "shell",
"command": "${workspaceRoot}/gradlew tomcatStartDebug",
"problemMatcher": "$msCompile"
},
{
"label": "Tomcat Stop",
"type": "shell",
"command": "${workspaceRoot}/gradlew tomcatStop",
"isBackground": true,
"presentation": {
"reveal": "never"
},
"problemMatcher": []
}
]
}
preference - keyboard shortcut (^+shfit+p 로 short로 검색)
keybindings.json
// Place your key bindings in this file to override the defaults
[
{
"key":"shift+alt+r",
"command":"workbench.action.tasks.runTask"
},
{
"key": "ctrl+shift+alt+s",
"command":"workbench.action.files.saveAll"
},
{
"key": "ctrl+alt+u",
"command":"editor.action.transformToUppercase"
},
{
"key": "ctrl+alt+l",
"command":"editor.action.transformToLowercase"
}
]
shift+alt+r 을 누르면 tasks 3개가 뜬다. tomcat run , run debug, stop.
디버깅시에는 tomcat debug를 실행하면, 디버깅 별도 포트를 알려준다.
5005로 나옴.
VC의 디버깅창에서 디버깅 configuration을 만들어준다.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Tomcat Debug",
"request": "attach",
"hostName": "localhost",
"port": 5005
}
]
}
이제 디버그 메뉴에서 Tomcat Debug로 실행하면 디버그 포트로 연결되면서 콜스택에
쓰레드 정보가 나올 것이다.
bp 설정하여 디버깅 가능.
'Develop > Java' 카테고리의 다른 글
gradle3 API server (0) | 2021.11.13 |
---|---|
gradle2 API server (0) | 2021.11.13 |
이클립스 단축키 이것만. (0) | 2019.11.10 |
Short URL(단축URL) API (1) | 2019.11.07 |
[JavaScript] 스탑와치 밀리초/StopWatch milliseconds (0) | 2019.08.27 |