2016-08-16 101 views
2

我正在嘗試應用書中的示例Gradle in Action以瞭解如何將gradle應用程序分離爲子項目。我在書中做了一個例子,一切都很順利。Gradle構建腳本應如何模塊化此應用程序?

我決定將相同的概念應用於Griffon框架的示例應用程序minimalistic build,源代碼:sources。我之所以選擇這個應用程序,是因爲它遵循正常的應用程序結構而不是Griffon的,我試圖填補Griffon的文檔中的缺陷(恕我直言),以便進行多項目構建:它有一個使用Open-Dolphin,Swing,JavaFX,Servlet的實例我覺得學習基礎太複雜了。

當然我撞到牆上大的時候,多次...

格里芬的JavaFX應用程序的結構如下:

├── 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文件內容是:

// 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 

我不知道這個結構是否更有意義,但是我最初想到的結構。

不顧一切我想我不能建立這個項目,我想知道如果有人能告訴我,如果我犯了一個錯誤與子項目的選擇,什麼應該是構建文件的內容。

我創建了重排後的源here保持原有的build.gradle文件原封不動一個zip文件,具有settings.gradle文件,使搖籃正確識別新的結構。

謝謝!

回答

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

嗨安德烈斯,非常感謝你看看這個。該項目運行良好,但我無法測試它。 我添加了一個缺少testCompile依賴到service-build.gradle(「org.codehaus。griffon:griffon-core-test:$ {griffonVersion}「)來允許測試編譯,但是如果我測試項目,那麼在服務測試運行時它會失敗。 –