프로젝트

다양한 방법으로 프로젝트를 생성할 수 있습니다. 기본적인 것은 자바 프로젝트이고 그외에 메이븐(maven), 그레이들(gradle) 프로젝트를 이용할 수 있습니다.

자바 프로젝트

자바 프로젝트를 생성할 때 기본적으로 쓰입니다. File > New > Java Project를 선택하면 됩니다.

외부 라이브러리 이용

외부 라이브러리를 사용할 수 있는 여러 가지 방법들이 있습니다.

내부 jar 파일

프로젝트 안에 jar 파일들을 이용하는 방법입니다.

  1. 프로젝트 이름 위에서 오른쪽 클릭 > New > Folder를 클릭하여 libs 폴더를 만듭니다.
  2. 필요한 라이브러리들을 인터넷을 통해 다운받아 libs 폴더에 저장합니다.
  3. 프로젝트 이름 오른쪽 클릭 > Build Path > Configure Build Path를 선택합니다.
  4. Libraries > Add JARs 클릭하여 위에서 만든 libs 폴더를 선택하여 필요한 jar 파일들을 추가합니다. 만일 libs 폴더에 jar 파일들이 없으면 libs 폴더가 나타나지 않을 수 있습니다.

외부 jar 파일

프로젝트 밖에 있는 jar 파일들을 이용하는 방법입니다.

  1. 프로젝트 이름 위에서 오른쪽 클릭 > Build Path > Add External Archives 클릭합니다.
  2. 원하는 폴더와 그 안에 있는 필요한 jar 파일들을 선택합니다.
  3. 프로젝트 밑에 Referenced Libraries 항목에 추가한 jar 파일들을 볼 수 있습니다.

다른 방법으로는 다음과 같이 할 수 있습니다.

  1. 프로젝트 이름 위에서 오른쪽 클릭 > Build Path > Configure Build Path 클릭합니다.
  2. Libraries 탭을 선택하고 Add External JARs를 선택합니다.
  3. 원하는 폴더와 그 안에 있는 필요한 jar 파일들을 선택합니다.
  4. 프로젝트 밑에 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"