Incremental Build Fails - Cannot Find Implementation

Aperta
#93 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
30/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
scala
Ambito
backend

Direzione di ricerca

Inizia riproducendo la ricostruzione incrementale nell’applicazione Play, quindi esamina InstanceLookup.scala:13 e Wired.scala:10 insieme a Global.scala:41. Confronta i class loader negli stack frame segnalati. Il lavoro è completato quando l’aggiunta o la rimozione di una classe controller risolve il problema senza eliminare l’output della build né forzare una ricostruzione completa.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

MacWire Version: 2.11-2.2.0
Play! Version: 2.11-2.3.10

The incremental compilation fails when adding/removing a class file with:

java.lang.RuntimeException: Cannot find implementations of class class controllers.FooBarGong!
at com.softwaremill.macwire.InstanceLookup$class.lookupSingleOrThrow(InstanceLookup.scala:13) ~[util_2.11-2.2.0.jar:2.2.0]
at com.softwaremill.macwire.Wired.lookupSingleOrThrow(Wired.scala:10) ~[util_2.11-2.2.0.jar:2.2.0]
at Global$.getControllerInstance(Global.scala:41) ~[na:na]
...

Resolution succeeds provided I delete the build output folder do a complete project rebuild.

Upon further investigation, I have learned of an inconsistent classloader state between stack frames as indicated by calling the following from the subject stack frame:

((ClassLoader)this.getClass().getClassLoader()).loadClass("controllers.FooBarGong")

Lookup succeeds from stack frame Global$.getControllerInstance(Global.scala:41) ~[na:na] (class loader ReloadableClassLoader(v1)) but fails to find the class from the deeper stack frame com.softwaremill.macwire.Wired.lookupSingleOrThrow(Wired.scala:10) (class loader PlayDependencyClassLoader)

The call site is fairly simple:

package modules

import play.api.Play
import play.api.libs.ws.WS

import controllers._

import com.softwaremill.macwire._
import services._

object ApplicationModule extends ControllerModule with ServiceModule

trait ControllerModule extends ServiceModule {
  import Play.current

  lazy val fooBarGongController = wire[FooBarGong]
}
Lingua principale
Scala
Stelle
1.3k
Fork
77
Merge medio
9m
PR unite (30g)
4

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di softwaremill/macwire

Tutte le issue di softwaremill/macwire

Issue simili

Altre issue su Scala

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.