es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gradle: cómo declarar una dependencia a una configuración específica de un proyecto programáticamente en Java.

Siguiendo la configuración descrita en Compartir artefactos entre proyectos de forma sencilla, nos encontramos en el caso especial donde tenemos una construcción de Gradle de múltiples módulos que produce diferentes tipos de archivos JAR y nos gustaría declarar una dependencia hacia esos archivos JAR en una configuración.


dependencies {
instrumentedClasspath(project(path: ":producer", configuration: 'instrumentedJars'))
}

Desde la documentación funciona muy bien.

En el proyecto dependency-tests tengo un proyecto que reproduce la configuración (con nombres diferentes, pero la idea es la misma).


Pero estoy haciendo esto en un plugin de Gradle y me gustaría tener la misma declaración en Java.

DependencyHandler dependencyHandler = project.getDependencies();

// this adds a dependency to the main jar of the 'producer' project:
dependencyHandler.add("instrumentedClasspath", project.getRootProject().findProject(":producer"));

// this is not working:
dependencyHandler.add("instrumentedClasspath", project.getRootProject().findProject(":producer").getConfigurations().getByName("instrumentedJars"));

<p>Fallando con el siguiente mensaje de error:
“`
FAILURE: Build failed with an exception.</p>

<ul>
<li>What went wrong:
Execution failed for task ':printConf'.
> Could not resolve all dependencies for configuration ':instrumentedJars'.
> Cannot convert the provided notation to an object of type Dependency: configuration ':producer:instrumentedJars' artifacts.
The following types/formats are supported:

<ul>
<li>Instances of Dependency.</li>
<li>String or CharSequence values, for example 'org.gradle:gradle-core:1.0'.</li>
<li>Maps, for example [group: 'org.gradle', name: 'gradle-core', version: '1.0'].</li>
<li>FileCollections, for example files('some.jar', 'someOther.jar').</li>
<li>Projects, for example project(':some:project:path').</li>
<li>ClassPathNotation, for example gradleApi().

Comprehensive documentation on dependency notations is available in DSL reference for DependencyHandler type.</p></li>
</ul></li>
<li>Try:
> Run with –info or –debug option to get more log output.
> Run with –scan to get full insights.</p></li>
</ul>

<p>“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El problema en el código Java es que la configuración instrumentedJars se está pasando como una cadena de texto (String) en lugar de un objeto Configuration. Para solucionar esto, podemos obtener el objeto Configuration del proyecto utilizando su nombre:

    DependencyHandler dependencyHandler = project.getDependencies();
    
    dependencyHandler.add("instrumentedClasspath", project(":producer").getConfigurations().getByName("instrumentedJars"));
    

    Esto agregará la configuración instrumentedJars del proyecto producer como una dependencia en la configuración instrumentedClasspath del proyecto actual.

Comments are closed.