eclipse command palette

Ctrl 3

  • vscode에서 명령 팔레트를 자주 쓰는데, 이클립스에서도 같은 기능이 있는지 확인해보았다
  • 이클립스에서 빠르게 파일을 열어보고 싶은데 vscode에서 Ctrl P 같은 명령어가 있는지 확인해보았다

이클립스 유용한 단축키

  • Ctrl Shift R ; Open resource ; 파일 빠르게 열기
  • Alt Shift L ; extract local variable ; 리팩토링
  • Alt Shift R ; rename ; 리팩토링
  • Ctrl Alt T ; terminal ; 터미널 열기

참고

taskkill -jar

상황

  • java -jar로 runable jar을 실행할 수 있다
  • 그런데 이 jar을 cmd로 종료할 수 없을까?
  • 보통의 프로그램이라면 taskkill /F /IM프로세스 이름을 통해 종료할 수 있다
  • 근데 java -jar 실행한 앱의 경우, 프로세스명이 java.exe, javaw.exe 정도이다

해결

  • jps 명령으로 .jar 파일 이름을 통해 PID를 얻을 수 있다
  • jps는 jdk가 설치되어있고 환경 변수만 잘 설정되어있다면 그냥 동작한다
example.bat
1
2
rem example
for /f "tokens=1" %i in ('jps -m ^| find "myApp"') do ( taskkill /F /PID %i )
  • find “myApp” 부분에 jar 파일 명을 적으면 된다
  • jar 파일명을 완전히 적지 않아도 된다

참고

gradle build 특정 jdk 버전으로

상황

  • 내 컴퓨터에는 여러 가지 자바 버전이 설치되어있다. (jdk1.8.0_281, jdk-13.0.2)
  • 자바 버전 1.8에서 동작하는 runable jar 파일을 만드는데, 1.8에서 실행이 안되었다
  • 그래들 프로젝트이다
  • 분명 프로젝트 세팅은 1.8로 되어있는데 막상 빌드 결과물 jar이 1.8에서 실행이 안되었다
  • 그런데 13에서 실행이 되는 것을 확인하고, 빌드가 다른 자바 버전으로 되는 것을 확인했다
error message
1
Error: A JNI Error has occurred, ... has been compiled by a more recent version of the java runtime

해결

1
gradlew build -Dorg.gradle.java.home="C:\Program Files\Java\jdk1.8.0_281"
  • 빌드할 때 자바 홈을 명시해 주었더니 해결되었다

참고

특정 자바 버전으로 jar 실행

상황

  • 기존에 사용하던 A.jar 실행파일이 있다
  • 자바 버전을 바꿨다
  • 환경변수 변화로 인해 A.jar이 더 이상 동작하지 않는다
  • 이 실행파일만 기존 자바 버전으로 실행할 수 없을까?
  • 또는
  • A.jar은 jdk9에서 실행 가능하고
  • B.jar은 jdk13에서 실행 가능한데, 둘 다 각자의 자바 버전으로 실행하려면 어떻게 해야 할까?

실행파일 만들기

ex.bat
1
2
3
4
5
6
7
pushd "%~dp0"

"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" -version
pause

"C:\Program Files\Java\jdk-13.0.2\bin\java.exe" -version
pause
  • 각 버전의 자바 파일 경로를 앞에 써준다
  • -version 옵션을 주어서 원하는 버전의 자바가 실행되는지 확인한다
runA.bat
1
2
3
pushd "%~dp0"

"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" -jar A.jar
  • 이런 식으로 특정 자바 버전으로 jar을 실행할 수 있겠다

참고

gradle project 에서 runnable jar 생성하기

  • 일반 자바 프로젝트처럼 Export > Runnable JAR file로 jar을 만들게 되면 생성된 jar파일의 용량이 매우 작은 것을 확인할 수 있다
  • 내가 추가한 외부 라이브러리들이 전부 빠져서 동작하지 않는다
  • gradle project에서는 어떤 방식으로 runable jar을 만들어야 할까?

build.gradle 수정하기

build.gradle
1
2
3
4
5
6
7
8
9
10
jar {
manifest {
attributes 'Main-Class': 'tmp.gradle.project.Main'
}
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}

  • jar { … } 에 해당하는 부분을 위처럼 새로이 추가해준다
  • attributes 'Main-Class': 'tmp.gradle.project.Main' 여기에는 자신의 메인 클래스를 지정하면 된다

jar파일 생성하기

terminal
1
2
cd {gradle project rootpath}
gradle jar
  • 자신의 그래들 프로젝트 경로에서 cmd를 켜주고
  • gradle jar 명령을 실행한다

jar파일 확인하기

  • build/libs 디렉터리에 가보면 jar파일이 생성돼있음을 확인할 수 있다
terminal
1
2
cd build\libs
java -jar {jar파일명}
  • 마지막으로 잘 실행되는지 확인한다

gradle로 외부라이브러리 설치하기

원하는 라이브러리 명 + gadle 키워드로 구글링한다

  • 나는 json-simple 을 받아보겠다

카피

  • 그래들 탭인지 잘 확인하고 카피한다
  • build.gradle 파일로와서 dependencies에 추가하고 저정한다

Gradle Project Refresh

  • 끝!

java memory 무한 증가.. 가비지 컬렉터 호출로 해결하기

App.java
1
2
3
4
5
6
7
8
pathname = null;
robot = null;
screencapture = null;
file = null;
str = null;
p = null;
d = null;
System.gc();
  • 내가 원할 때 가비지 컬렉터를 호출할 수 있다. System.gc();

상황

  • java.awt.Robot 으로 스크린샷을 찍고 이미지 파일로 저장하는 로직이 있었다
  • 이거를 runnable jar로 익스포트하고 실행해사 잘 사용하고 있었는데
  • 스크린샷을 찍는 함수가 실행될 때마다 메모리가 20mb 씩 증가했다…
  • 함수가 끝낼 때에 맞춰서 사용한 변수들을 전부다 null을 대입했는데도 해결되지 않았다

해결

  • 마지막에 가비지 컬렉션을 호출함으로써 메모리가 폭풍증가하지 않게되었다

이클립스에서 gradle 프로젝트 생성하기

  • 나는 C > C++ > java > js 순으로 배웠다
  • 요즘은 쭉 nodejs에서 npm, package.json 을 통해 모듈을 쉽게 설치하고 관리하였다
  • 오랜만에 java로 돌아오니까 외부 라이브러리를 임포트 할 때 불편하게 느껴졌다
  • gradle의 이론이 대해서는 자세히 모르지만,
  • 이전에 build.gradle파일을 통해 라이브러리를 설치한 기억이 있어서
  • gradle 프로젝트를 생성, 사용해보았다

gradle 설치

  • Windows에 Gradle 설치하기 by Jeongjin Kim 를 보고 따라 했다

  • https://gradle.org/releases/ 에 들어가서 garadle을 다운로드한다

  • Download: binary-only or complete 인데 나는 binary-only 를 다운로드하였다

  • .zip 파일로 받아지는데 적당한 위치에 압축을 풀어주고

  • 환경변수를 세팅한다

  • GRADLE_HOME : 그래들 디렉터리 경로 ex) C:\Tools\gradle-6.6.1

  • path : %GRADLE_HOME%\bin

  • 새롭게 cmd를 열고 gradle -v하여 잘 설치되었는지 확인한다

이클립스에 gradle 플러그인 설치 및 세팅

  • Help > Marketplace 로 들어가 gradle을 검색한다
  • 코끼리 모양의 아이콘을 가진 Buildship Gradle Integration 3.0 을 인스톨했다
  • 이클립스 재시작

  • Window > Preferences 로 들어간다
  • gradle을 검색하고 gradle 경로를 지정해준다
  • 여기서 C:\Tools\gradle-6.6.1 환경변수 설정에서 GRADLE_HOME으로 지정했던 경로를 적어준다

  • 이제 그래들 프로젝트를 생성해보자
  • File > new > other 로 들어가 gradle을 검색한다
  • gradle project를 선택하고 다음으로 넘어가면 위 화면이 나온다
  • next

  • Project name 을 적어준다
  • next

  • next

  • 조금 기다리면 된다
  • Finish 버튼이 활성화 되면 클릭

  • build.gradle을 우클릭하고 Gradle > Refesh Gradle Project 를 누르면 외부 라이브러리들이 설치된다
  • 설치된 라이브러리들은 이클립스 익스플로러에서 Project and External Dependencies에서 확인할 수 있다

참고

javadoc 만들고 github에서 보기

  • 코드따로 문서따로… 하지 않고 한번에 해결하기
  • 또 만든 javadoc을 깃허브에서 보여주는법!

따라하기

준비물

  • 이클립스

시작

  • 나는 이 영상보고 따라했다
  • 코드는 아무렇게나, 자바독 주석도 아무렇게나 원하는 대로 만들면된다. 자바독 주석으로!
App.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package application;

/**
* Date: 2020-09-22
* This is a simple application for adding two integers.
* @author chin_
* @version 1.0
*/
public class App {

/**
* int value for first number
*/
public int a;
/**
* int value for second number
*/
public int b;


/**
* This method adds x and y and returns the int result.
* @param x first int value
* @param y second int value
* @return returning int value result from x + y
*/
public int sum(int x, int y) {
return x + y;
}

/**The main method of this application
* @param args array of string arguments.
*/
public static void main(String[] args) {

}

}
  • /** */ 이런식으로 만든다
  • 설명하고 싶은 변수나 메서드 선언부에 커서를 두고 alt + shift + j 하면 자바독 주석이 생긴다
  • 열심히 설명 적고..
  • 자바독을 생성한다

  • 자신의 jdk 폴더로 가서 javadoc.exe를 지정해주고, (이미 세팅되어 있으면 패스)
  • javadoc문서가 나올 경로를 지정한다
  • 기본값으로 (프로젝트명)\doc 이렇게 되어있을 텐데, (프로젝트명)\docs로 수정한다
  • docs가 깃허브 페이지를 통해 문서를 보여줄때 경로 규격이다
  • docs폴더는 프로젝트 루트에 존재해야한다
  • Finish를 눌러 완료하면 javadoc 문서가 완성된다
cmd
1
git init
  • 이제 git init 한다
.gitignore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# Created by https://www.toptal.com/developers/gitignore/api/java
# Edit at https://www.toptal.com/developers/gitignore?templates=java

### Java ###
# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# End of https://www.toptal.com/developers/gitignore/api/java
  • 위 내용으로 .gitignore 파일을 추가한다. java 프로젝트용 .gitignore파일이다

  • 쉽게 .gitignore파일 만드는 곳

  • 이제 깃허브 저장소로 올린다

  • 브라우저로 방금 만든 저장소 세팅에 들어간다

  • 브랜치를 마스터로 선택,
  • /docs 선택
  • save 버튼 클릭
  • 이렇게 설정하면 잠시후 깃허브에서 javadoc으로 만든 내 프로젝트 문서를 볼 수 있게된다
  • 너무 빨리 접속하면 GitHub Pages is temporarily down for maintenance. 메시지를 볼 수 있다

여기까지 프로젝트 파일