사용자 도구

사이트 도구


gradle:java

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:java [2015/09/21 16:56]
kwon37xi [JavaExec]
gradle:java [2022/06/30 16:36] (현재)
kwon37xi [Test 완료후에 실패건이 있는지 마킹만 하기]
줄 39: 줄 39:
  
 // 소스 인코딩 지정방법 1 // 소스 인코딩 지정방법 1
-[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'+[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'
 // 소스 인코딩 지정밥법 2 // 소스 인코딩 지정밥법 2
-tasks.withType(Compile) {+tasks.withType(JavaCompile
 +    options.encoding = 'UTF-8' 
 +
 +javadoc {
     options.encoding = 'UTF-8'     options.encoding = 'UTF-8'
 } }
줄 62: 줄 65:
   * 빌드 결과 : ''build/*''   * 빌드 결과 : ''build/*''
     * ''buildDir'' 를 프로젝트에 상대적인 경로로 바꿔줄 수 있다. <code groovy>buildDir = 'target'</code>     * ''buildDir'' 를 프로젝트에 상대적인 경로로 바꿔줄 수 있다. <code groovy>buildDir = 'target'</code>
 +    * ''export GRADLE_OTPS="-Dorg.gradle.project.buildDir=/path/to/custom-build-dir'' System Property 옵션으로 ''buildDir''을 명령행에서 변경할 수 있다. 명령행에 지정하면 안 됐고, 항상 환경변수로 해야만 했다.
 ===== 기본 태스크 ===== ===== 기본 태스크 =====
   * ''clean'' : build 디렉토리 삭제   * ''clean'' : build 디렉토리 삭제
줄 269: 줄 272:
 |title | String | 프로젝트 이름과 버전 | |title | String | 프로젝트 이름과 버전 |
   * [[http://www.gradle.org/docs/current/javadoc/org/gradle/external/javadoc/StandardJavadocDocletOptions.html|StandardJavadocDocletOptions (Gradle API 1.10)]] 참조하여 javadoc 옵션들 지정.   * [[http://www.gradle.org/docs/current/javadoc/org/gradle/external/javadoc/StandardJavadocDocletOptions.html|StandardJavadocDocletOptions (Gradle API 1.10)]] 참조하여 javadoc 옵션들 지정.
 +
 +==== Java 9 HTML5 javadoc ====
 +  * [[java:9|Java 9]]부터 HTML5 Javadoc 생성가능함.
 +  * [[http://mrhaki.blogspot.com/2018/11/gradle-goodness-generate-javadoc-in.html|Gradle Goodness: Generate Javadoc In HTML5]]
 +<code>
 +javadoc {
 +    options.addBooleanOption('html5', true)
 +}
 +</code>
 +
  
 ==== 멀티 모듈의 소스를 합쳐 Javadoc 생성 ==== ==== 멀티 모듈의 소스를 합쳐 Javadoc 생성 ====
줄 312: 줄 325:
         configurations.all { configuration -> allDependencies = allDependencies + configuration.asFileTree }         configurations.all { configuration -> allDependencies = allDependencies + configuration.asFileTree }
  
-        ant.taskdef(name: 'delombok', classname: 'lombok.delombok.ant.DelombokTask',+        // 구버전 Task class : lombok.delombok.ant.DelombokTask 
 +        // 최신버전 Task class: lombok.delombok.ant.Tasks$Delombok 
 +        ant.taskdef(name: 'delombok', classname: 'lombok.delombok.ant.Tasks$Delombok',
             classpath: configurations.lombok.asPath)             classpath: configurations.lombok.asPath)
         ant.delombok(from: srcJava, to: srcDelomboked, verbose: true,         ant.delombok(from: srcJava, to: srcDelomboked, verbose: true,
줄 382: 줄 397:
  
   * 컴파일러 옵션 지정 <code groovy>   * 컴파일러 옵션 지정 <code groovy>
-compileJava.options.compilerArgs = ['옵션1', ..]+compileJava.options.compilerArgs = ["-Xlint:unchecked", "-Xlint:deprecation"...] 
 + 
 +// 혹은 
 +tasks.withType(JavaCompile) { 
 +    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" 
 +
 </code> </code>
  
줄 396: 줄 417:
   * 테스트 수행이 끝나면 보고서를 생성한다.   * 테스트 수행이 끝나면 보고서를 생성한다.
   * JUnit, TestNG를 지원한다.   * JUnit, TestNG를 지원한다.
 +  * [[https://github.com/radarsh/gradle-test-logger-plugin|radarsh/gradle-test-logger-plugin: A Gradle plugin for printing beautiful logs on the console while running tests]]
 ==== 테스트 실행 ==== ==== 테스트 실행 ====
   * 테스트는 독립 JVM에서 격리상태로 실행된다.   * 테스트는 독립 JVM에서 격리상태로 실행된다.
줄 413: 줄 434:
 } }
 </code> </code>
-  * ''ignoreFailures'' 프라퍼티는 테스트 실패시 행위를 정의한다. 기본값은 ''false''이며 테스트가 실패하면 즉시 멈다. ''true''일 경우 테스트가 실패해도 멈추지 않고 다음으로 넘어다.+  * ''ignoreFailures'' 프라퍼티는 테스트 실패시 행위를 정의한다. 기본값은 ''false''이며 테스트가 실패하면 build를 실표로 표시한다. 단, 실패한 테스트에서 즉시 빌드를 추지는 않는다. ''true''일 경우 테스트가 실패해도 멈추지 않고 다음으로 넘어가며 빌드를 진행하고 성공으로 표시한다. 
 +  * ''failFast'' : ''true''이면 테스트 실패건에서 즉시 빌드를 중단한다. 테스트 실행시 ''--fail-fast'' 옵션을 줘도 된다.
   * ''testLogging'' 프라퍼티는 테스트의 로깅 레벨을 설정한다. 기본적으로 모든 실패한 테스트에 대한 요약 메시지를 보여준다. [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.logging.TestLoggingContainer.html|TestLoggingContainer]] 참조.   * ''testLogging'' 프라퍼티는 테스트의 로깅 레벨을 설정한다. 기본적으로 모든 실패한 테스트에 대한 요약 메시지를 보여준다. [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.logging.TestLoggingContainer.html|TestLoggingContainer]] 참조.
     * 표준 출력/에러를 화면에 표시하려면 ''testLogging.showStandardStreams = true'' 설정 필요.     * 표준 출력/에러를 화면에 표시하려면 ''testLogging.showStandardStreams = true'' 설정 필요.
줄 458: 줄 480:
   * ''@Test'' 어노테이션을 가진 메소드가 있는 클래스   * ''@Test'' 어노테이션을 가진 메소드가 있는 클래스
  
-==== 테스트의 분리 ====+==== 테스트의 분리 - 소스셋이 동일하고 이름으로 구분 - 더이상 사용하지 말 것 ====
   * ''*Test'' 와 ''*IntegrationTest''를 분리해서 실행하고자 하는 경우가 있을 수 있다.   * ''*Test'' 와 ''*IntegrationTest''를 분리해서 실행하고자 하는 경우가 있을 수 있다.
   * [[http://java.dzone.com/articles/gradle-goodness-running-single|Gradle goodness - Running Single Test 참조]]   * [[http://java.dzone.com/articles/gradle-goodness-running-single|Gradle goodness - Running Single Test 참조]]
줄 486: 줄 508:
 } }
 </code> </code>
 +
 +==== 테스트의 분리 - 소스셋 분리 - 권장 ====
 +  * [[https://www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing/|Getting Started With Gradle: Integration Testing]] 참조. 단, Gradle 버전업에 따른 변경 필요.
 +
 +<code groovy>
 +// 별도 소스셋 구성
 +sourceSets {
 +    integrationTest {
 +        java {
 +            compileClasspath += main.output + test.output
 +            runtimeClasspath += main.output + test.output
 +            srcDir file('src/integration-test/java')
 +        }
 +        groovy { // for Spock
 +            compileClasspath += main.output + test.output
 +             runtimeClasspath += main.output + test.output
 +            srcDir file('src/integration-test/groovy')
 +        }
 +        resources.srcDir file('src/integration-test/resources')
 +    }
 +}
 +
 +// integrationTest 전용 configuration 지정.
 +// integrationTest에만 필요한 의존성 지정 가능.
 +
 +configurations {
 +    integrationTestCompile.extendsFrom testCompile
 +    integrationTestRuntime.extendsFrom testRuntime
 +}
 +
 +// Task 생성
 +task integrationTest(type: Test) {
 +    testClassesDirs = sourceSets.integrationTest.output.classesDirs // 구버전에서는 Dir 단수형으로만 지정됨.
 +    classpath = sourceSets.integrationTest.runtimeClasspath
 +    reports { // reports 는 원하는대로만.
 +        junitXml.enabled = true
 +        html.enabled = true
 +        ignoreFailures = true
 +    }
 +}
 +
 +// 의존성 지정으로 check 실행시 자동 테스트
 +check.dependsOn integrationTest
 +</code>
 +
 +==== TestSets Plugin 사용 ====
 +  * [[https://www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing-with-the-testsets-plugin/|Getting Started With Gradle: Integration Testing With the TestSets Plugin]]
 +  * [[https://www.testwithspring.com/lesson/running-integration-tests-with-gradle-spock-edition/|Running Integration Tests With Gradle – Spock Edition]]
 +  * TBD
  
 ==== Convention Values ==== ==== Convention Values ====
줄 539: 줄 610:
     reportOn subprojects*.test     reportOn subprojects*.test
 } }
 +</code>
 +
 +==== Test 완료후에 실패건이 있는지 마킹만 하기 ====
 +  * ''ignoreFailures=true''로 두고 테스트를 진행하고 빌드를 완료하지만, 실패건이 있는지 여부를 나중에 알고자 할 때
 +  * [[git:gitlab|Gitlab]] CI 등에서 실패건이 있어도 후속 작업은 진행하기 위해서 만듬.
 +<code groovy>
 +test {
 +    ignoreFailures = true
 +    afterSuite { TestDescriptor desc, TestResult result ->
 +        if (result.failedTestCount > 0) {
 +            rootProject.buildDir.mkdir()
 +            File testFailed = rootProject.file("${rootProject.buildDir}/testFailedMarker")
 +            if (!testFailed.exists()) {
 +                testFailed.createNewFile()
 +                testFailed.text = "이 파일이 존재하면 테스트중 실패한 건이 존재한다는 의미입니다."
 +            }
 +            logger.warn("testFailedMarker - {}", result.failedTestCount)
 +        }
 +    }
 +}
 +</code>
 +  * 다른 stage 에서 ''<project-root>/build/testFailedMarker'' 파일의 존재여부를 체크해서 존재하면 테스트 실패로 간주한다.
 +
 +<code sh>
 +if [ -f "build/testFailedMarker" ]; then
 +    echo "file exists"
 +    exit 1
 +fi
 </code> </code>
 ===== Jar ===== ===== Jar =====
줄 595: 줄 694:
  
 ===== JavaExec ===== ===== JavaExec =====
- 
 Java 클래스를 실행할 때 [[gradle:ant|Ant를 사용하는 방법]]과 [[http://gradle.org/docs/current/dsl/org.gradle.api.tasks.JavaExec.html|JavaExec]]를 사용하는 방법이 있다. Java 클래스를 실행할 때 [[gradle:ant|Ant를 사용하는 방법]]과 [[http://gradle.org/docs/current/dsl/org.gradle.api.tasks.JavaExec.html|JavaExec]]를 사용하는 방법이 있다.
-''project.javaexec()'' 메소드를 호출해도 된다. ''javaexec'' 메소드는 Closure를 인자로 받는데 거기 들어가는 내용은 ''JavaExec'' 설정과 같다.+''project.javaexec()'' 메소드를 호출해도 된다. ''javaexec'' 메소드는 Closure를 인자로 받는데 거기 들어가는 내용은 ''JavaExec'' 설정과 같다. [[https://discuss.gradle.org/t/how-to-use-in-gradle-javaexec-with-classpath-dependency/7479|How to use in gradle javaexec with classpath dependency]] 
 + 
 +[[gradle:application|Gradle Application Plugin]]도 참조한다.
  
 <code groovy> <code groovy>
줄 625: 줄 725:
     args '인자1', '인자2', .....     args '인자1', '인자2', .....
     systemProperty 'simple.message', 'Hello '     systemProperty 'simple.message', 'Hello '
 +    jvmArgs '-Xmx512m'
 } }
 </code> </code>
줄 641: 줄 742:
 } }
 </code> </code>
 +
 +
  
gradle/java.1442823999.txt.gz · 마지막으로 수정됨: 2015/09/21 16:56 (바깥 편집)