Sfondo
Abbiamo diverse app Web in esecuzione su Tomcat 7.0.x (su Linux). Per ragioni storiche, abbiamo compilato la lib "comune" (ovvero $ CATALINA_HOME / lib) con molti jar di applicazione. Questi vasi includono Spring, Jackson e i nostri barattoli di persistenza.
Mentre distribuiamo nuovi jar di persistenza, siamo coinvolti in un inferno del classpath: alcuni jar sono OK in ~ / webapps / foo / WEB-INF / lib, ma alcuni devono essere esclusi e posizionati in Common. Le recenti avventure mostrano che alcuni potrebbero dover essere in entrambi i luoghi .
La nostra build locale (Windows) è altrettanto disordinata: abbiamo una cartella piena di barattoli. Costruiamo con Eclipse (non Gradle, Ant, ecc.) E non abbiamo un elenco esplicito di jar usati dalle applicazioni web. La build di Linux usa Ant, ma semi-selettivamente giare nei file WAR.
Domanda
Vorrei scrivere una strategia su come districarci da questa situazione. Un approccio è elencato di seguito, ma gradirei eventuali perfezionamenti o approcci alternativi.
L'obiettivo è correggere il processo di distribuzione, non la build locale.
Strategia
Sul computer locale, usa Gradle per compilare ogni applicazione web:
- aggiungi dipendenze in fase di compilazione fino a quando la compilazione è OK
- individua la cache locale di Gradle (o osserva l'output) per trovare le dipendenze di runtime transitive
- aggiungi tutti i jar a ~ / WEB-INF / lib per l'app Web, con riferimenti espliciti nella build Ant formale
- distribuire in un'installazione di Tomcat nuova e pulita
- osserva i log di avvio per qualsiasi eccezione "ClassNotFound", sia per le librerie di terze parti che per le nostre librerie di applicazioni
- aggiungi queste librerie al form Ant formale
- eseguire test QA di regressione su applicazione e monitor per "ClassNotFound"