프로젝트¶
다양한 방법으로 프로젝트를 생성할 수 있습니다. 기본적인 것은 자바 프로젝트이고 그외에 메이븐(maven), 그레이들(gradle) 프로젝트를 이용할 수 있습니다.
자바 프로젝트¶
자바 프로젝트를 생성할 때 기본적으로 쓰입니다. File > New > Java Project를 선택하면 됩니다.
외부 라이브러리 이용¶
외부 라이브러리를 사용할 수 있는 여러 가지 방법들이 있습니다.
내부 jar 파일¶
프로젝트 안에 jar 파일들을 이용하는 방법입니다.
- 프로젝트 이름 위에서 오른쪽 클릭 > New > Folder를 클릭하여 libs 폴더를 만듭니다.
- 필요한 라이브러리들을 인터넷을 통해 다운받아 libs 폴더에 저장합니다.
- 프로젝트 이름 오른쪽 클릭 > Build Path > Configure Build Path를 선택합니다.
- Libraries > Add JARs 클릭하여 위에서 만든 libs 폴더를 선택하여 필요한 jar 파일들을 추가합니다. 만일 libs 폴더에 jar 파일들이 없으면 libs 폴더가 나타나지 않을 수 있습니다.
외부 jar 파일¶
프로젝트 밖에 있는 jar 파일들을 이용하는 방법입니다.
- 프로젝트 이름 위에서 오른쪽 클릭 > Build Path > Add External Archives 클릭합니다.
- 원하는 폴더와 그 안에 있는 필요한 jar 파일들을 선택합니다.
- 프로젝트 밑에 Referenced Libraries 항목에 추가한 jar 파일들을 볼 수 있습니다.
다른 방법으로는 다음과 같이 할 수 있습니다.
- 프로젝트 이름 위에서 오른쪽 클릭 > Build Path > Configure Build Path 클릭합니다.
- Libraries 탭을 선택하고 Add External JARs를 선택합니다.
- 원하는 폴더와 그 안에 있는 필요한 jar 파일들을 선택합니다.
- 프로젝트 밑에 Referenced Libraries 항목에 추가한 jar 파일들을 볼 수 있습니다.
jar 파일 만들기¶
프로젝트 이름 위에서 오른쪽 클릭 > Export > Java > Runnable JAR file 또는 Jar file을 선택합니다.
gradle 프로젝트¶
File > New > Project를 클릭하여 Gradle 항목에서 Gradle Project를 선택합니다. Finish를 누르면 자동으로 필요한 패키지를 설치합니다. 약간의 시간이 걸릴 수 있습니다.
외부 패키지 추가¶
jsoup
패키지를 프로젝트에서 사용하고 싶으면 build.gradle
파일을 열어 dependencies
부분에 다음을 추가합니다.
implementation 'org.jsoup:jsoup:1.11.3'
프로젝트 창에서 프로젝트를 오른쪽 클릭하여 Gradle > Refresh Gradle Project를 클릭하여 jsoup 패키지를 다운받는다. Project and External Dependencies에 보면 jsoup-1.11.3.jar 파일이 보일 것입니다. 자동으로 패키지를 인식하게 하려면 Preferences > Gradle (> Configure Workspace Settings)를 클릭하여 Automatic Project Synchronization을 선택하면 됩니다.
빌드 실행¶
그레이들 빌드를 실행하기 위해서는 Gradle Tasks 항목에 build 를 오른쪽 클릭하여 실행을 누르면 됩니다.
패키지 만들기¶
프로젝트 위에서 오른쪽 클릭을 하여 New > Package를 누른 후 적당한 이름을 입력합니다. 이름은 도메인이 큰 곳에서 작은 곳으로 입력합니다. 예를 들어 kr.koreauniv.imath.pkgtest
와 같이 입력합니다.
프로젝트 배포¶
jar 파일을 만들어 배포합니다. gradle의 태스크 중에서 jar 태스크를 실행하면 build/libs
에 jar 파일이 생성 됩니다.
실행 가능한 jar¶
실행 가능한 jar 파일을 만들려면 jar 부분 manifest
의 속성으로 Main-Class
에 시작 가능한 main 메소드가 있는 클래스를 지정해야 합니다.
jar {
manifest {
attributes "Main-Class": "kr.koreauniv.imath.pkgtest.Main"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
위에서 from
은 gradle의 테스크인 Jar의 메소드로서 복사할 파일의 위치를 지정합니다.
gradle jar
테스크를 실행하면 /build/libs
에 jar 파일이 만들어진다. 이것을 실행하기 위해서는 다음과 같이 합니다.
java -jar 프로젝트.jar
외부 패키지 포함한 실행가능한 jar¶
하지만 외부 패키지가 포함되어 있으면 실행할 때 패키지가 없다고 에러를 낸다. 이 에러를 해결하는 방법은 두 가지로 생각해 볼 수 있습니다.
첫번째는 외부패키지가 모두 포함된 jar 파일을 만드는 것입니다. 이러한 jar파일을 뚱뚱한 jar(fat-jar)라고 부른다. 이것은 shadow
플러그인을 사용할 수 있습니다. build.gradle
파일 안에 다음과 같이 삽입합니다.
apply plugin: 'com.github.johnrengelman.shadow'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.2'
}
}
jar {
finalizedBy shadowJar // 이부분이 자동으로 fat-jar를 만들어 준다.
manifest {
attributes 'Main-Class': 'com.dowellware.dyoon.pkgtest1.GradleTest'
}
}
라이브러리 클래스 경로에 추가¶
두번째로는 jar 파일을 실행할 때 클래스 경로를 직접 지정해서 실행하는 방법이 있습니다. 이것이 작동하려면 종속 패키지들이 모두 다운받아 있어야 합니다. 가령 jsoup-1.11.3.jar 파일이 종속되어 있는 mypackage.jar 안의 kr.koreauniv.imath.MyMain 클래스를 실행하려면 다음과 같이해야 합니다.
java -cp ./jsoup-1.11.3.jar;./mypackage.jar kr.koreauniv.imath.MyMain
jsoup와 mypackage jar 파일이 현재 디렉토리에 있다는 가정입니다.
한글 인코딩 문제¶
패키지를 배포할 때 한글이 있는 코드는 다른 곳에서 사용할 때 깨져서 나올 수 있습니다. 이럴 때는 build.gradle
파일에 다음을 삽입해서 그레이들이 빌드할 때 문제가 생기지 않도록 합니다.
buildscript {
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
}
gradle 이전 버전을 사용할 때는 다음을 build.gradle 파일 안에 적습니다.
compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"