2013-05-13 74 views
1

我有一個由buildSrc/build.gradle和一個項目級build.gradle組成的gradle構建項目。 buildSrc/build.gradle編譯一個jar依賴項,其中包含項目級build.gradle所需的類。但是,當項目級別的build.gradle嘗試實例化由buildSrc/build.gradle引入的類的實例時,構建失敗。錯誤是:Gradle:構建文件不應該包含聲明

無法打開構建文件的no_buildscript類緩存〜/ git/project/build.gradle - 構建文件〜/ git/project/build.gradle不應該包含一個包語句。

特別是,項目級構建需要位於buildSrc/build.gradle引入的bacon-test-utilities中的DIGSauceLabsUpdater類。

我已經嘗試將bacon-test-utilities軟件包導入到項目級構建中,並從「def dashUpdater」行中的類中刪除軟件包名稱。這給了我相同的構建錯誤。

任何人都可以幫助我理解爲了訪問由項目級構建中的buildSrc/gradle.build引入的類,還需要做些什麼?

謝謝

-erzsebet

這裏是我的buildSrc /的build.gradle文件:

// vim:ft=groovy 
apply plugin: 'base' 
apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'maven' 
apply plugin: 'groovy' 


// automated test dependencies 
// --------------------------- 
dependencies { 
def saucerestVersion = "1.0" 

compile gradleApi() 

// sauce lab's REST client 
compile "com.saucelabs.saucerest:saucelabs-saucerest:$saucerestVersion" 

// test utilities 
// Note: Needed here for DIGSauceLabsUpdater use in main build.gradle 
compile "com.drillinginfo.global:bacon-test-utilities:0.+" 
} 

// artifacts and maven stuff 
// ------------------------- 
repositories { 

    maven { 
    url "${project.mavenPublicUrl}/" 
} 

} 

這裏是我的項目級的build.gradle的相關位:

// vim:ft=groovy 
apply plugin: 'base' 
apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'maven' 
apply plugin: 'groovy' 

// browser driver extensions for acceptance test tasks 
ext.drivers = ["firefox", "chrome", "ie"] 


// automated test dependencies 
// --------------------------- 
dependencies { 
    groovy "org.codehaus.groovy:groovy-all:1.8.6" 

    def gebVersion = "0.7.2" 
    def seleniumVersion = "2.31.0" 
    def lazerycodeVersion = "1.1" 
    def saucerestVersion = "1.0" 

    // spock 
    testCompile "org.codehaus.geb:geb-spock:$gebVersion" 
    testCompile "org.spockframework:spock-core:0.6-groovy-1.8" 

    // gradle plugin for test listener code 
    compile files('buildSrc/src/main/lib/gradle-plugins-1.2.jar') 

    // test utilities 
    testCompile "com.drillinginfo.global:bacon-test-utilities:0.+" 

    // Drivers 
    drivers.each { driver -> 
     testCompile "org.seleniumhq.selenium:selenium-$driver-driver:$seleniumVersion" 
    } 
} 

// automated acceptance tasks 
// -------------------------- 
// define a TestListener implementation to report test results to Sauce Labs 
// THE NEXT LINE IS WHERE THE BUILD CHOKES 
def dashUpdater = new com.drillinginfo.global.test.utils.DIGSauceLabsUpdater() 

// ensure the tests have access to properties passed in on the command line (-D) 
tasks.withType(Test) { 

    gradle.addListener(dashUpdater) 
} 

這是我的./gradlew運行任務的堆棧跟蹤輸出:

FAILURE: Build failed with an exception. 

* What went wrong: 
Could not open no_buildscript class cache for build file '/home/account/git/project/build.gradle' (/home/account/.gradle/caches/1.2/scripts/build_7hf4r97619snd7in1srbtn16n6/ProjectScript/no_buildscript). 
Build file '/home/account/git/project/build.gradle' should not contain a package statement. 

* Try: 
Run with --info or --debug option to get more log output. 

* Exception is: 
org.gradle.cache.CacheOpenException: Could not open no_buildscript class cache for build file '/home/ecarmean/git/bacon/build.gradle' (/home/account/.gradle/caches/1.2/scripts/build_7hf4r97619snd7in1srbtn16n6/ProjectScript/no_buildscript). 
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:54) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:26) 
    at org.gradle.cache.internal.DefaultCacheFactory$CacheFactoryImpl.doOpenDir(DefaultCacheFactory.java:71) 
    at org.gradle.cache.internal.DefaultCacheFactory$CacheFactoryImpl.open(DefaultCacheFactory.java:110) 
    at org.gradle.cache.internal.DefaultCacheRepository$PersistentCacheBuilder.doOpen(DefaultCacheRepository.java:183) 
    at org.gradle.cache.internal.DefaultCacheRepository$PersistentCacheBuilder.doOpen(DefaultCacheRepository.java:133) 
    at org.gradle.cache.internal.DefaultCacheRepository$AbstractCacheBuilder.open(DefaultCacheRepository.java:120) 
    at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler.compile(FileCacheBackedScriptClassCompiler.java:51) 
    at org.gradle.groovy.scripts.internal.ShortCircuitEmptyScriptCompiler.compile(ShortCircuitEmptyScriptCompiler.java:35) 
    at org.gradle.groovy.scripts.internal.CachingScriptClassCompiler.compile(CachingScriptClassCompiler.java:36) 
    at org.gradle.groovy.scripts.DefaultScriptCompilerFactory$ScriptCompilerImpl.compile(DefaultScriptCompilerFactory.java:60) 
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:121) 
    at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38) 
    at org.gradle.configuration.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:43) 
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:463) 
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:75) 
    at org.gradle.configuration.ProjectEvaluationConfigurer.execute(ProjectEvaluationConfigurer.java:23) 
    at org.gradle.configuration.ProjectEvaluationConfigurer.execute(ProjectEvaluationConfigurer.java:21) 
    at org.gradle.configuration.DefaultBuildConfigurer$1.execute(DefaultBuildConfigurer.java:38) 
    at org.gradle.configuration.DefaultBuildConfigurer$1.execute(DefaultBuildConfigurer.java:35) 
    at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:439) 
    at org.gradle.api.internal.project.AbstractProject.allprojects(AbstractProject.java:434) 
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35) 
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142) 
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113) 
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81) 
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:38) 
    at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39) 
    at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:25) 
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50) 
    at org.gradle.launcher.cli.ActionAdapter.execute(ActionAdapter.java:30) 
    at org.gradle.launcher.cli.ActionAdapter.execute(ActionAdapter.java:22) 
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:200) 
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:173) 
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) 
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:138) 
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) 
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) 
    at org.gradle.launcher.Main.doAction(Main.java:48) 
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) 
    at org.gradle.launcher.Main.main(Main.java:39) 
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50) 
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32) 
    at org.gradle.launcher.GradleMain.main(GradleMain.java:26) 
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33) 
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130) 
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:47) 
Caused by: java.lang.UnsupportedOperationException: Build file '/home/account/git/project/build.gradle' should not contain a package statement. 
    at org.gradle.groovy.scripts.internal.DefaultScriptCompilationHandler.compileScript(DefaultScriptCompilationHandler.java:126) 
    at org.gradle.groovy.scripts.internal.DefaultScriptCompilationHandler.compileToDir(DefaultScriptCompilationHandler.java:67) 
    at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler$CacheInitializer.execute(FileCacheBackedScriptClassCompiler.java:80) 
    at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler$CacheInitializer.execute(FileCacheBackedScriptClassCompiler.java:65) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache.buildCacheDir(DefaultPersistentDirectoryCache.java:100) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache.access$100(DefaultPersistentDirectoryCache.java:36) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache$1$1.run(DefaultPersistentDirectoryCache.java:82) 
    at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.doWriteAction(DefaultFileLockManager.java:162) 
    at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.writeFile(DefaultFileLockManager.java:151) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache$1.execute(DefaultPersistentDirectoryCache.java:80) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache$1.execute(DefaultPersistentDirectoryCache.java:70) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.withExclusiveLock(DefaultPersistentDirectoryStore.java:73) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache.init(DefaultPersistentDirectoryCache.java:70) 
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:46) 
    ... 46 more 
+0

Gradle抱怨的是一個package *語句*(例如'pack年齡foo.bar')。顯然你的構建腳本中有一個,這是不允許的。 – 2013-05-13 17:56:26

+0

「包聲明」Gradle抱怨的是: – XDelphiGrl 2013-05-13 18:12:37

+0

_package statement_ Gradle抱怨的是:def dashUpdater = new com.drillinginfo.global.test.utils.DIGSauceLabsUpdater()。我不明白爲什麼它被解釋爲一個包而不是一個完全合格的類名。對不起,分裂職位!我在編輯原始評論時被召開會議。 – XDelphiGrl 2013-05-13 19:13:51

回答

1

一位同事,我孤立了這個問題,導致我的gradle生成失敗,並顯示「build.gradle不應該包含包語句」錯誤。包含依賴項的jar文件包含.class和.groovy文件。當我們重新編譯jar包含.class文件時,gradle構建運行時沒有錯誤,並且能夠從(麻煩的!)依賴項實例化一個類。

我還通過刪除buildSrc/build.gradle簡化了我的構建結構。它不再需要,因爲該目錄中沒有源代碼。爲了引入項目級build.gradle中所需的(麻煩!)依賴項,我使用了一個buildScript塊。

謝謝Peter Niederwieser閱讀並回答問題!

下面是最終構建腳本中的相關內容:

// vim:ft=groovy 

import com.drillinginfo.global.test.utils.DIGSauceLabsUpdater 

apply plugin: 'base' 
apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'maven' 
apply plugin: 'groovy' 

// automated test dependencies 
// --------------------------- 
dependencies { 

    groovy "org.codehaus.groovy:groovy-all:1.8.6" 

    def gebVersion = "0.7.2" 
    def seleniumVersion = "2.31.0" 
    def lazerycodeVersion = "1.1" 
    def saucerestVersion = "1.0" 

    // spock 
    testCompile "org.codehaus.geb:geb-spock:$gebVersion" 
    testCompile "org.spockframework:spock-core:0.6-groovy-1.8" 

    // test utilities 
    testCompile "com.drillinginfo.global:bacon-test-utilities:0.+" 

    // Drivers 
    drivers.each { driver -> 
     testCompile "org.seleniumhq.selenium:selenium-$driver-driver:$seleniumVersion" 
    } 
} 

buildscript { 
    repositories { 
     maven { 
      url "${project.mavenPublicUrl}/" 
     } 
    } 
    dependencies { 
     classpath group: 'com.drillinginfo.global', name: 'bacon-test-utilities', version: '0.0.1+17' 
    } 
} 

/automated acceptance tasks 
// -------------------------- 
// define a TestListener implementation to report test results to Sauce Labs 
def dashUpdater = new DIGSauceLabsUpdater() 

// ensure the tests have access to properties passed in on the command line (-D) 
tasks.withType(Test) { 

    gradle.addListener(dashUpdater) 
} 
0

我遇到這個問題,在build.gradle如下:

buildscript { 
    dependencies { 
    classpath fileTree(
      dir: "some/directory", 
      include: '**/*.jar') 
    } 
} 

some/directory有源罐子所以修正爲:

buildscript { 
    dependencies { 
    classpath fileTree(
      dir: "some/directory", 
      include: '**/*.jar', 
      exclude: '**/-sources.jar') 
    } 
} 
相關問題