2015-01-15 55 views
1

我想從基本程序創建一個罐子。Gradle版本不包括源碼/源代碼groovy

  • 我有一個基本的常規項目,即SRC /組織...../*。常規在根
  • 我有以下的build.gradle

    apply plugin: 'groovy' 
    version = '1.0' 
    
    repositories { 
        mavenCentral(); 
    } 
    
    dependencies 
    { 
        compile files (fileTree(dir: 'lib', include: ['*.jar']), 
         fileTree(dir: 'lib/DocxDep', include: ['*.jar'])) 
    } 
    
    task buildLabServicesJar(type: Jar) { 
    from files(sourceSets.main.output.classesDir) 
    from { 
        configurations.compile.collect { 
         it.isDirectory() ? it : zipTree(it) 
        } 
        configurations.runtime.collect { 
         it.isDirectory() ? it : zipTree(it) 
        } 
    } 
    
    manifest { 
        attributes 'Implementation-Title': 'Lab Services', 
         'Implementation-Version': version, 
         'Main-Class': 'org.xxx.clarity.ClarityServices' 
        } 
    } 
    

問題是當我運行和/或inspec的jar文件我的src/**的sclasses不包括在內! (所有的依賴都是完美的)

這裏有什麼問題?

UPDATE

當我添加: 從文件(文件樹(導演: 'SRC')) 它包括.groovy文件:(

任務當我添加

from sourceSets.main.output.classesDir 

的任務:

sourceSets { 
    main { 
     groovy { 
      srcDir 'src' 
     } 
    } 
} 

他們沒有得到包括:(無法找到任何其他方式....

+1

只是爲了澄清我在世界各地的gradle文件中看到的一個小問題。 groovy.srcDir'src'是_ADDING_'src'目錄到源目錄列表(其中包含按照慣例src/main/groovy,如mark已經指出)。以_REPLACE_慣例使用groovy.srcDir = ['src'] –

回答

4

最終工作build.gradle。 (謝謝所有)。

apply plugin: 'application' 
    apply plugin: 'groovy' 

    version = '1.0' 

    repositories { 
     mavenCentral(); 
    } 

    dependencies 
     { 
      compile files (fileTree(dir: 'lib', include: ['*.jar']), 
       fileTree(dir: 'lib/DocxDep', include: ['*.jar'])) 
      compile 'org.codehaus.groovy:groovy-all:2.3.6' //Was missing 
     } 

    task buildLabServicesJar(type: Jar) { 
     from files(sourceSets.main.output) //Was missing/wrong  
    from { 
     configurations.compile.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
     configurations.runtime.collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
    with jar 

    sourceSets.main.groovy { 
     srcDirs = [ 'src' ] //Was missing/wrong 
    } 

    manifest { 
     attributes 'Implementation-Title': 'Lab Services', 
      'Implementation-Version': version, 
      'Main-Class': 'org.petermac.clarity.ClarityServices' 
     } 
    } 
2

默認情況下,當應用「時髦」插件搖籃查找源src/main/groovy。您需要重新構建項目或配置您的source sets以適當反映您的項目結構。

+0

謝謝。請參閱上面的編輯。 – GarethReid

+0

我甚至試圖添加一個測試groovy文件到一個包main.groovy,它仍然不包括在內。建築不應該這麼難。 – GarethReid

+2

@garethreid:不是。不遵循約定,你會讓自己難過。 –

1

在你的jar任務中引用sourceSets.main.output.classesDir意味着它只會複製jar中的那個目錄中的所有內容。問題是,當你運行gradle buildLabServicesJar時,沒有任何東西告訴gradle應該先編譯類。這就是爲什麼該目錄保持爲空,並且你的jar不包含已編譯的類。如果您在:任務自動裝配

task buildLabServicesJar(type: Jar) { 
    from files(sourceSets.main.output.classesDir) 
    ... 
} 

task buildLabServicesJar(type: Jar) { 
    from files(sourceSets.main.output) 
    ... 
} 

任務自動裝配踢修改你的任務聲明意味着,如果你聲明一個任務,因爲輸入的輸出到另一個任務(您buildLabServicesJar)gradle這個知道它必須首先生成輸出(例如運行編譯任務)。

希望有幫助!

+0

我做了這個改變和改變 - > srcDirs = ['src/**'],現在我沒有源代碼(類或其他)在jar中。 – GarethReid

+0

它應該是srcDirs = ['src'] –

+0

如果我這樣做(['src'])我得到錯誤:無法推斷Groovy類路徑,因爲在類路徑上找不到Groovy Jar:configuration':compile' – GarethReid

-1

您不得不原諒我,但我最近已經從微軟的漫長生活中過渡過來,並且仍在學習。我是因缺乏博客和基本的東西,示例代碼的驚訝,我在做什麼是如此的標準......(我會發佈一個一次/如果我這出)

注意:的IntelliJ - >構建 - >構建工件完美的作品,但我想移動到竹。

反正考慮到每個人的想法,這是我的文件(錯誤)

 apply plugin: 'groovy' 
    version = '1.0' 

    repositories { 
     mavenCentral(); 
    } 

    dependencies 
    { 
     compile files (fileTree(dir: 'lib', include: ['*.jar']), 
       fileTree(dir: 'lib/DocxDep', include: ['*.jar'])) 
    } 
    //println "Classes dir: " + sourceSets.main.groovy 


    task buildLabServicesJar(type: Jar) { 
     from files(sourceSets.main.output) 
     //from sourceSets.main.groovy.output 
     //from files(fileTree(dir: 'src'))   
     from { 
      configurations.compile.collect { 
       it.isDirectory() ? it : zipTree(it) 
      } 
      configurations.runtime.collect { 
       it.isDirectory() ? it : zipTree(it) 
      } 
     } 

     manifest { 
      attributes 'Implementation-Title': 'Lab Services', 
        'Implementation-Version': version, 
      'Main-Class': 'org.petermac.clarity.ClarityServices' 
     } 
    } 

    sourceSets { 
     main { 
      groovy.srcDirs = [ 'src' ] 
     } 
    } 

錯誤:因爲沒有Groovy的瓶的類路徑中找到無法推斷Groovy類路徑:配置「:編譯」

如果我將src行更改爲: srcDirs = ['src/**'] 它會生成,但會再次刪除所有源。