2016-08-16 12 views
2

그라드 응용 프로그램을 서브 프로젝트로 분리하는 방법을 배우려면 Gradle in Action의 예제를 적용하려고합니다. 나는 그 책에서 예를 들고 모든 것이 잘 풀렸다.그래 플은 스크립트를 작성하여이 애플리케이션을 모듈화해야합니까?

그리폰 프레임 워크 minimalistic build, 소스 코드 : sources이라는 샘플 응용 프로그램에 동일한 개념을 적용하기로 결정했습니다. Griffon 대신 일반 응용 프로그램 구조를 따르므로이 응용 프로그램을 선택 했으므로 다중 프로젝트 빌드에 대한 Griffon의 설명서에있는 간격 (IMHO)을 채우려했습니다. Open Dolphin, Swing, JavaFX 및 Servlet을 사용하는 하나의 필수 요소가 있습니다. 나는 그것이 기초를 배우기에는 너무 복잡하다고 느꼈다.

├── build.gradle 
├── config 
│   └── HEADER 
├── gradle 
│   ├── functional-test.gradle 
│   ├── integration-test.gradle 
│   ├── javafx-plugin.gradle 
│   └── wrapper 
│    ├── gradle-wrapper.jar 
│    └── gradle-wrapper.properties 
├── gradle.properties 
├── gradlew 
├── gradlew.bat 
└── src 
    ├── functional-test 
    │   └── java 
    │    └── org 
    │     └── example 
    │      └── SampleFunctionalTest.java 
    ├── integration-test 
    │   └── java 
    │    └── org 
    │     └── example 
    │      └── SampleIntegrationTest.java 
    ├── main 
    │   ├── java 
    │   │   ├── Config.java 
    │   │   └── org 
    │   │    └── example 
    │   │     ├── Launcher.java 
    │   │     ├── SampleController.java 
    │   │     ├── SampleModel.java 
    │   │     ├── SampleService.java 
    │   │     └── SampleView.java 
    │   └── resources 
    │    ├── application.properties 
    │    ├── griffon-icon-128x128.png 
    │    ├── griffon-icon-16x16.png 
    │    ├── griffon-icon-24x24.png 
    │    ├── griffon-icon-256x256.png 
    │    ├── griffon-icon-32x32.png 
    │    ├── griffon-icon-48x48.png 
    │    ├── griffon-icon-64x64.png 
    │    ├── griffon.png 
    │    ├── log4j.properties 
    │    ├── messages.properties 
    │    ├── META-INF 
    │    │   └── griffon 
    │    │    ├── griffon.core.artifact.GriffonController 
    │    │    ├── griffon.core.artifact.GriffonModel 
    │    │    ├── griffon.core.artifact.GriffonService 
    │    │    └── griffon.core.artifact.GriffonView 
    │    ├── org 
    │    │   └── example 
    │    │    └── sample.fxml 
    │    └── resources.properties 
    └── test 
     └── java 
      └── org 
       └── example 
        ├── SampleControllerTest.java 
        └── SampleServiceTest.java 

build.gradle 파일 내용은 다음과 같습니다 :

물론

나는 벽에 큰 시간, 여러 번 ...

그리폰의 자바 FX 애플리케이션은 다음과 같은 구조했다 히트

// tag::plugins[] 
plugins { 
    id 'java' 
    id 'idea' 
    id 'com.github.ben-manes.versions' version '0.12.0' 
    id 'com.github.hierynomus.license' version '0.11.0' 
} 

apply from: 'gradle/javafx-plugin.gradle' 
apply from: 'gradle/integration-test.gradle' 
apply from: 'gradle/functional-test.gradle' 
// end::plugins[] 

// tag::javafx[] 
javafx { 
    mainClass = 'org.example.Launcher' 
} 
// end::javafx[] 

// tag::dependencies[] 

repositories { 
    jcenter() 
    mavenLocal() 
} 

dependencies { 
    compile "org.codehaus.griffon:griffon-javafx:${griffonVersion}" 
    compile "org.codehaus.griffon:griffon-guice:${griffonVersion}" 

    runtime('log4j:log4j:1.2.17') { 
     exclude group: 'ant',   module: 'ant-nodeps' 
     exclude group: 'ant',   module: 'ant-junit' 
     exclude group: 'ant-contrib', module: 'ant-contrib' 
    } 
    runtime 'org.slf4j:slf4j-log4j12:1.7.21' 

    testCompile "org.codehaus.griffon:griffon-javafx-test:${griffonVersion}" 
    testCompile 'pl.pragmatists:JUnitParams:1.0.5' 
    testCompile 'org.mockito:mockito-core:2.0.59-beta' 
} 
// end::dependencies[] 

// tag::resources[] 
processResources { 
    from(sourceSets.main.resources.srcDirs) { 
     exclude '**/*.properties' 
     exclude '**/*.xml' 
    } 
    from(sourceSets.main.resources.srcDirs) { 
     include '**/*.properties' 
     include '**/*.xml' 
     filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [ 
      'application.name' : project.name, 
      'application.version': project.version, 
      'griffon.version' : griffonVersion 
      ]) 
    } 
} 
// end::resources[] 

license { 
    header = rootProject.file('config/HEADER') 
    strictCheck = true 
    ignoreFailures = true 
    mapping { 
     java = 'SLASHSTAR_STYLE' 
     fxml = 'XML_STYLE' 
    } 
    ext.year = '2016' 
    exclude '**/*.png' 
} 

그리고 달성하고자하는 구조는 다음과 같습니다.

├── build.gradle 
├── config 
│   └── HEADER 
├── gradle 
│   ├── functional-test.gradle 
│   ├── integration-test.gradle 
│   ├── javafx-plugin.gradle 
│   └── wrapper 
│    ├── gradle-wrapper.jar 
│    └── gradle-wrapper.properties 
├── gradle.properties 
├── gradlew 
├── gradlew.bat 
├── launcher 
│   ├── launcher-build.gradle 
│   └── src 
│    └── main 
│     └── java 
│      ├── Config.java 
│      └── org 
│       └── example 
│        └── Launcher.java 
├── resources 
│   ├── resources-build.gradle 
│   └── src 
│    └── main 
│     └── resources 
│      ├── application.properties 
│      ├── griffon-icon-128x128.png 
│      ├── griffon-icon-16x16.png 
│      ├── griffon-icon-24x24.png 
│      ├── griffon-icon-256x256.png 
│      ├── griffon-icon-32x32.png 
│      ├── griffon-icon-48x48.png 
│      ├── griffon-icon-64x64.png 
│      ├── griffon.png 
│      ├── log4j.properties 
│      ├── messages.properties 
│      └── resources.properties 
├── service 
│   ├── resources 
│   │   └── META-INF 
│   │    └── griffon 
│   │     └── griffon.core.artifact.GriffonController 
│   ├── service-build.gradle 
│   └── src 
│    ├── main 
│    │   └── java 
│    │    └── org 
│    │     └── example 
│    │      └── SampleService.java 
│    └── test 
│     └── java 
│      └── org 
│       └── example 
│        └── SampleServiceTest.java 
├── settings.gradle 
└── view 
    ├── src 
    │   ├── functional-test 
    │   │   └── java 
    │   │    └── org 
    │   │     └── example 
    │   │      └── SampleFunctionalTest.java 
    │   ├── integration-test 
    │   │   └── java 
    │   │    └── org 
    │   │     └── example 
    │   │      └── SampleIntegrationTest.java 
    │   ├── main 
    │   │   ├── java 
    │   │   │   └── org 
    │   │   │    └── example 
    │   │   │     ├── SampleController.java 
    │   │   │     ├── SampleModel.java 
    │   │   │     └── SampleView.java 
    │   │   └── resources 
    │   │    ├── META-INF 
    │   │    │   └── griffon 
    │   │    │    ├── griffon.core.artifact.GriffonModel 
    │   │    │    ├── griffon.core.artifact.GriffonService 
    │   │    │    └── griffon.core.artifact.GriffonView 
    │   │    └── org 
    │   │     └── example 
    │   │      └── sample.fxml 
    │   └── test 
    │    └── java 
    │     └── org 
    │      └── example 
    │       └── SampleControllerTest.java 
    └── view-build.gradle 

구조가 더 이해하기 쉽지만 처음 생각한 이유는 무엇인지 모르겠습니다.

내가 시도한 모든 것, 나는이 프로젝트를 구축 할 수 없었고 누군가가 하위 프로젝트를 선택하는 데 실수가 있었는지와 빌드 파일의 내용이 무엇인지 말해 줄 수 있는지 궁금합니다.

나는 Gradle을 제대로 새로운 구조를 인식하게하는 settings.gradle 파일, 훼손되지 않은 원래의 build.gradle 파일을 유지 재 배열 된 소스 here와 zip 파일을 만들었습니다.

감사합니다.

답변

1

이 문제는 service 프로젝트의 리소스 파일이 누락되어 발생합니다. view 프로젝트에서도 비슷한 문제가 발생합니다. 이것은 모든 리소스 파일이 다른 위치 (resources 프로젝트)로 옮겨 졌기 때문입니다. 모든 리소스가 올바른 위치에 있었기 때문에 응용 프로그램을 하위 프로젝트로 분할하기 전에 문제가 없었습니다.

다음 단계에 따라 빌드를 해결할 수 :

$ cd service 
$ mkdir -p src/test/resources 
$ touch src/test/resources/Config.properties 
$ mkdir -p src/main/resources 
$ mv ../resources/src/main/resources/messages.properties src/main/resources/ 

$ cd ../view 
$ mkdir -p src/test/resources 
$ touch src/test/resources/Config.properties 

이 다시 테스트 녹색 만들기에 충분해야한다.

1

Marcelo, 멀티 프로젝트 빌드 here의 새 버전을 게시했습니다. 이 버전은 루트 레벨에서 공통 설정을 유지하고 각 하위 프로젝트의 빌드 파일에 각 하위 프로젝트의 고유 한 사항을 남깁니다.

+0

안녕하세요. Andres, 정말 고마워요. 프로젝트가 잘 실행되지만 테스트하는 데 문제가 있습니다. 누락 된 testCompile 종속성을 service-build.gradle ("org.codehaus.griffon : griffon-core-test : $ {griffonVersion} ") 테스트를 컴파일 할 수 있지만 프로젝트를 테스트하면 서비스 테스트를 실행할 때 실패합니다. –