How to configure Artifactory to download zip file for CPP project?

Hi, I need to download some third party libraries zip file from the artifactory and download to specific folder to link with build library.

plugins {
    id "com.jfrog.artifactory" version "3.0.1"
}
  apply plugin: 'cpp'
apply plugin: 'com.jfrog.artifactory'
  dependencies {
    compile(group: 'com.google', name: 'protobuf', version: '2.5.0', ext: 'zip')
}
     artifactory {
    contextUrl = "${artifactory_contextUrl}"
 //The base Artifactory URL if not overridden by the publisher/resolver
    println "${artifactory_contextUrl}"
    publish {
        repository {
            repoKey = 'libs-release-local'
            maven = true
                       }
    }
    resolve {
        repository {
            repoKey = 'libs-release'
            maven = true
                       }
    }
}
sources {
    "${project.name}" {
  cpp {
    lib library: 'protobuf', linkage: 'static'
         }
 }
}

However I am getting below error:

* Where:
Build file 'C:\tools\Gradle\gradle_test\cpp_artifactory\build.gradle' line: 30
  * What went wrong:
A problem occurred evaluating root project 'cpp_artifactory'.
> Could not find method compile() for arguments [{group=com.google, name=protobuf, version=2.5.0, ext=zip}] on root project 'cpp_artifactory'.
  * Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
  BUILD FAILED

Below is the output for stacktrace:

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'cpp_artifactory'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:148)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
        at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:59)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:504)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:83)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:129)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        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:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method compile() for arguments [{group=com.google, name=protobuf, version=2.
5.0, ext=zip}] on root project 'cpp_artifactory'.
        at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
        at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
        at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:172)
        at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:79)
        at build_4528i1yzbq1ydxx31bd1qg9to$_run_closure1.doCall(C:\tools\Gradle\gradle_test\cpp_artifactory\build.gradle:30)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:63)
        at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:130)
        at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:91)
        at org.gradle.api.internal.project.AbstractProject.dependencies(AbstractProject.java:843)
        at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:225)
        at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:129)
        at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)
        at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:79)
        at build_4528i1yzbq1ydxx31bd1qg9to.run(C:\tools\Gradle\gradle_test\cpp_artifactory\build.gradle:28)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
        ... 32 more

Please Help me to resolve this issue.

Thanks Mandar

“compile” is a configuration specific to the java plugin and its derivatives. See this thread (http://forums.gradle.org/gradle/topics/example-needed-for-external-dependency-for-cpp-plugin) for how you can use zipped libraries as dependencies for native libraries.

Thanks Gary,

Its great stuff, and working correctly. just posting the code I used for Artifactory

plugins {
    id "com.jfrog.artifactory" version "3.0.1"
}
  apply plugin: 'cpp'
apply plugin: 'com.jfrog.artifactory'
  artifactory {
    contextUrl = "${artifactory_contextUrl}"
 //The base Artifactory URL if not overridden by the publisher/resolver
    println "${artifactory_contextUrl}"
    publish {
        repository {
            repoKey = 'libs-release-local'
            maven = true
                       }
    }
    resolve {
        repository {
            repoKey = 'libs-release'
            maven = true
                       }
    }
}
configurations {
    osslibs
}
  dependencies {
        osslibs(group: 'com.google', name: 'protobuf', version: '2.5.0', ext: 'zip')
}
  task extractOSS(type: Copy) {
    from {
            configurations.osslibs.collect {zipTree(it)}
    }
    into "opensrc"
}

This works great, but I thought I’d mention that it fails if the following option is enabled in your gradle.properties file.

org.gradle.configureondemand=true

when that was enabled, I got the following error:

Cannot resolve external dependency com.my.org:module:3.8.0 because no repositories are defined.

As soon as I commented that line, it worked great.