2016-06-27 72 views
1

我正在開發一個Apache Ant項目的演變過程,以便使用Gradle對其進行編譯,並且我有不同的子項目集。如何使用另一個模塊的調試類來編譯Gradle子項目

我的目標是使用主項目的輸出作爲一些子項目的依賴項。全局配置如下:

MainProject: 
-> src/main/java 
-> src/main/resources 
-> src/test/java 
-> src/test/resources 
-> src/mocks/java 

ChildProject1: 
-> src/main/java 
-> src/main/resources 
-> src/test/java 
-> src/test/resources 
-> src/mocks/java 

主項目正確包含在子構建路徑中,並且在鏈接Eclipse時正確找到所有鏈接。

我已經包含在settings.gradle文件的ChildProject主體工程及其在構建依賴關係:

dependencies { 
    compile project(':MainProject') 
} 

我的問題是,ChildProject需要從嘲笑/ java的輸出來編譯,雖然它似乎Gradle編譯過程確實包含了作爲main/java文件的「默認」輸出,我收到一條錯誤消息,指出無法找到來自mocks的「符號」。

我曾與所需的嘲笑MainProject測試java文件編譯類似的問題被使用,它被添加解決:

sourceSets { 
    mocks { 
     java { 
      srcDir 'src/mocks/java' 
     } 
     compileClasspath += sourceSets.main.runtimeClasspath 
    } 
    test { 
     compileClasspath += sourceSets.mocks.output 
     runtimeClasspath += sourceSets.mocks.output 
    } 
} 

的模擬源正確添加到測試類路徑中。

如何告訴我的ChilProject使用MainProject的模擬輸出來編譯測試?

回答

0

我會盡力爲您指出正確的方向。通常你在搖籃聲明多項目的依賴,像這樣:

dependencies { 
    compile project(':projA') 
} 

這隱含定義說使用的projAdefault文物作爲一個依賴。

我相信你想要的是使用projA依賴項的mock工件。要做到這一點的方法是:

  1. 創建一個新的jar任務從mainmock sourceSet編譯的類文件結合起來。

    task mocksJar(type: Jar) { 
        classifier 'mocks' 
        group 'build' 
        from sourceSets.main.output 
        from sourceSets.mocks.output 
    } 
    
  2. 導出mock神器projA構建通過創建名爲mocks新搖籃配置和分配神器出口:

    configuration { mocks } 
    artifacts.mocks mocksJar 
    
  3. 導入您的項目中mocks配置需要projA使用擴展相關語法:

    dependencies { 
        compile project(path:':projA', configuration:'mocks') 
    } 
    
+0

感謝您的回答,我正在嘗試從您的建議開始解決我的問題。 然而,我不知道我應該如何在我的主項目中聲明工件,我沒有從例如我知道配置塊在這裏定義不同的源代碼編譯過程那裏得到「configuration {mocks}」這一行。 我從來沒有使用Gradle中的工件,並且我發現Gradle官方文檔不清楚。 感謝您的幫助,期待下一個答案!! –

+0

抱歉,關於雙重帖子,我沒有在配置中添加「mocks」(雖然我不知道這是做什麼...)和編譯過程順利,但我不能確定在你的例子中的後面的神器/ jar聲明應該是,你能精確嗎? –

+0

你可以把1.節在主構建文件的末尾,'jarMocks'應該是用'mocks'源代碼集中定義的模擬源代碼構建JAR的任務,因爲mcoks JA R缺少主要的類文件,我更新了2.節的答案。 – cmcginty

相關問題