2012-06-26 18 views
15

Ho alcuni progetti Java/Maven che desidero utilizzare in un progetto Grails 2.0.4. Ho provato vari approcci, come ad esempio:Come aggiungere file Java JAR al progetto Grails?

  1. Installazione dei file JAR nel mio repository Maven locali, e l'esecuzione di grails install-dependency com.foo:my-project:0.0.1-SNAPSHOT
  2. Copiare i file JAR nella cartella lib del graal.
  3. Aggiunta compile com.foo:my-project:0.0.1-SNAPSHOT alla sezione dipendenze di BuildConfig.groovy
  4. decommentando mavenLocal() e passando /home/me/.m2/repository

posso aver provato alcune altre cose, come superstiziosamente gettare in un grails clean ogniqualvolta conveniente. In ogni caso, grails compile produce il seguente risultato: la compilazione non riesce, impossibile risolvere ogni riferimento a una delle classi in uno dei due JAR.

Qualche idea di cosa mi manca?

+1

Questo è davvero strano perché qualsiasi di queste opzioni dovrebbe lavoro ... Non ti è capitato di compilare le classi nel tuo JAR con una versione più recente di Java di quella con cui hai eseguito Grails? Mi sono imbattuto in un problema simile con un jar del driver PostgreSQL una volta e questa è stata la causa. – proflux

+3

Puoi verificare che il file jar contenga le classi mancanti con 'jar tf lib.jar | grep mypackage.MyClass'? – ataylor

+2

Sono stato catturato da qualcosa del genere in passato ... mi ero dimenticato di "importare" le classi che stavo usando. – cdeszaq

risposta

16

Inserire il barattolo nella cartella lib dovrebbe fare il trucco. Stiamo usando lo stesso approccio al momento senza problemi.

+4

um ... pulito, provato di nuovo, e funziona. –

+0

La cartella 'lib' predefinita è scomparsa a partire da Grails 3.0. http://grails.github.io/grails-doc/3.0.x/guide/single.html#upgrading -> "La risoluzione delle dipendenze deve essere utilizzata per risolvere i file JAR" –

6

Aggiungere il barattolo alla cartella "lib" non è stato sufficiente per me. Ho dovuto eseguire:

grails compile --refresh-dependencies 

Dopo quello che ha funzionato.

0

Grails refresh-dependency, clean, ecc. Non ha funzionato per me. Ciò che ha funzionato per me è stato l'uscita dal demone Grails e l'avvio di Grails.

4

Se Grails per impostazione predefinita non prendono i locali .jar librerie situate in <GRAILS-APP-DIR>/lib (sembra che con Grails 3.X la configurazione di default della cartella /lib viene rimossa) il modo più semplice per farlo rispettare sta modificando build.gradle per aggiungere una dipendenza dalla directory locale.

Per quasi tutti i casi è, naturalmente, meglio usare i Maven pronti contro termine, tuttavia è possibile avere alcune db-vendor-drivers o di altre biblioteche che non sono in un repo pubblica. Per farlo per questo le biblioteche modificano la <GRAILS-APP-DIR>/build.gradle e aggiungere qualcosa di simile:

dependencies { 
    ... 
    compile fileTree(dir: './lib', include: ['*.jar']) 
    ... 
} 

Se si vuole si può utilizzare un altro elenco (non /lib) in quanto si sta specificando esso. Di utilizzare Naturalmente la portata corretta (ad esempio per i db-vendor-drivers che probabilmente già sono nel vostro percorso di applicazione classe contenitore la portata sarà runtime invece di compile)

Speranza che aiuta,

+0

Non sono sicuro del motivo per cui presti attenzione risposte a domande antiche. Spero che questo aiuti qualcuno, ma non cercherò di valutarlo. Non ho fatto alcun Grail in oltre tre anni. –

+3

@EricWilson Sto solo provando 'Grails' per la prima volta ..., vedo che questa domanda ha solo risposte con la cosa da fare ma non la spiegazione su come funziona. Quindi cerco semplicemente di argomentare come funziona. Non preoccuparti, non sto guardando che tu controlli la risposta::), la scrivo solo se aiuta qualcuno. – albciff

Problemi correlati