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.

Cómo obtener el valor de configuración de otro proyecto en una construcción de múltiples proyectos.

No estoy seguro de haber comprendido bien el concepto de flujo de trabajo de sbt. Tengo una estructura de varios proyectos de profundidad arbitraria en mi archivo build.sbt y quiero definir una tarea que me muestre las dependencias de la biblioteca en las que dependen los subproyectos actuales del proyecto. O, en general: ¿hay alguna manera de obtener el valor de configuración de otro proyecto?

Estoy intentando hacer algo como esto:

val hierarchyDeps = taskKey<a href="""">Seq[ModuleID]</a>
val hierarchyDepsImpl = Def.task {
  loadedBuild.value.allProjectRefs.flatMap { case (projectRef, resolvedProject) =>
    (projectRef / libraryDependencies).value
  }
}

val cmn = project.in(file("cmn"))
val subA = project.in(file("sub<em>a")).dependsOn(cmn).settings(hierarchyDeps := hierarchyDepsImpl.value)
val subB = project.in(file("sub</em>b")).dependsOn(cmn).settings(hierarchyDeps := hierarchyDepsImpl.value)

Pero obtengo un java.lang.IllegalArgumentException:

java.lang.IllegalArgumentException: Could not find proxy for val projectRef: sbt.ProjectRef in List(value projectRef, value $anonfun, method $anonfun$hierarchyDepsImpl$1, value hierarchyDepsImpl, object $5879c5c8d08c0b0b007a, package <empty>, package <root>) (currentOwner= value hierarchyDepsImpl )
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que la variable projectRef no se está resolviendo correctamente. Una solución sería utilizar el método Project.extract para obtener el ProjectRef de cada subproyecto y luego utilizarlo para obtener las dependencias de la biblioteca. Aquí está la versión actualizada del código:

    val hierarchyDeps = taskKey[Seq[ModuleID]]("")
    
    val hierarchyDepsImpl = Def.task {
      Project.extract(state.value).structure.allProjectRefs.flatMap { case (projectRef, _) =>
        (projectRef / libraryDependencies).value
      }
    }
    
    lazy val cmn = project.in(file("cmn"))
    lazy val subA = project.in(file("sub_a")).dependsOn(cmn).settings(
      hierarchyDeps := hierarchyDepsImpl.value
    )
    
    lazy val subB = project.in(file("sub_b")).dependsOn(cmn).settings(
      hierarchyDeps := hierarchyDepsImpl.value
    )
    

    En esta versión, utilizamos el método Project.extract para obtener el objeto state y utilizarlo para acceder a la Structure del proyecto. Luego, podemos utilizar el método allProjectRefs para obtener una lista de todos los subproyectos y, para cada uno, podemos obtener sus dependencias de la biblioteca utilizando la sintaxis (projectRef / libraryDependencies). Finalmente, podemos devolver la lista combinada de todas las dependencias de la biblioteca para todos los subproyectos en el proyecto.

Comments are closed.