De ce poate IntelliJ IDEA să rezolve clasele, dar Groovy / Griffon nu?

Lucrez la o aplicație Griffon, folosind IntelliJ și încerc să folosesc bibliotecile de proiect dcm4che. Am reușit să fac editorul de cod al IntelliJ să nu se mai plângă de cursuri lipsă, dar când merg să rulez aplicația Griffon, compilatorul se dă în flăcări, plângându-se că este unable to resolve class DicomInputStream etc.

Nu fac nimic elegant. Tot ce fac este să încerc să includ câteva fișiere jar simple, dar din orice motiv, lucrurile nu funcționează corect.

Recunosc, nu sunt foarte bine versat în a trata problemele classpath și am folosit IntelliJ doar de puțin timp și Griffon / Groovy de și mai puțin timp, dar sunt complet nedumerit.

Iată setul de instrucțiuni de import care eșuează:

import org.dcm4che2.io.DicomInputStream
import org.dcm4che2.data.DicomObject
import org.dcm4che2.data.DicomElement

Și acesta este setul de mesaje de eroare pe care le primesc în consola IntelliJ când încerc să rulez sau să depanez aplicația:

Base Directory: C:\Users\[REDACTED]\MyApp\MyAppClient
Resolving dependencies...
Dependencies resolved in 698ms.
Running script C:\Program Files (x86)\Griffon\Griffon-0.9.4\scripts\RunApp.groovy
Environment set to development
 [griffonc] Compiling 32 source files to C:\Users\[REDACTED]\.griffon\0.9.4\projects\MyApp\classes
 [griffonc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
 [griffonc] C:\Users\[REDACTED]\MyApp\MyAppClient\griffon-app\controllers\myappclient\SelectRootController.groovy: 9: unable to resolve class org.dcm4che2.data.DicomElement
 [griffonc]  @ line 9, column 1.
 [griffonc]    import org.dcm4che2.data.DicomElement
 [griffonc]    ^
 [griffonc] 
 [griffonc] C:\Users\[REDACTED]\MyApp\MyAppClient\griffon-app\controllers\myappclient\SelectRootController.groovy: 7: unable to resolve class org.dcm4che2.io.DicomInputStream
 [griffonc]  @ line 7, column 1.
 [griffonc]    import org.dcm4che2.io.DicomInputStream
 [griffonc]    ^
 [griffonc] 
 [griffonc] C:\Users\[REDACTED]\MyApp\MyAppClient\griffon-app\controllers\myappclient\SelectRootController.groovy: 8: unable to resolve class org.dcm4che2.data.DicomObject
 [griffonc]  @ line 8, column 1.
 [griffonc]    import org.dcm4che2.data.DicomObject
 [griffonc]    ^
 [griffonc] 
 [griffonc] 3 errors
Compilation error: Compilation Failed

Pentru a instala bibliotecile dcm4che, am făcut următoarele:

  1. Descărcați binarele bibliotecii (zip-ul -bin) și despachetați fișierul zip la MyApp\MyAppClient\lib\dcm4che-2.0.25-bin
  2. În dialogul Structura proiectului, sub Module->MyAppClient, sub fila Dependențe, dau clic pe „Adăugați” și selectez folderul: MyAppClient\lib\dcm4che-2.0.25-bin\dcm4che-2.0.25\lib

În acest moment, editorul de cod încetează să se plângă că nu poate găsi și rezolva clasele, dar când rulez sau depanez aplicația, primesc erorile de compilare. Totul funcționează foarte bine fără a importa acele clase (și codul care le folosește).

Ce pot face pentru a rezolva asta? Ce alte informații ar fi utile pentru a afla ce se întâmplă?


person cdeszaq    schedule 07.12.2011    source sursă
comment
Cum exact i-ați spus IDEA unde vă sunt dependențele? AFAIK modalitatea ortodoxă este fie să le puneți în directorul lib, fie să folosiți un DSL special pentru a le indica prin intermediul ID-urilor Maven.   -  person Peter Gromov    schedule 07.12.2011
comment
@PeterGromov, am adăugat o descriere a modului în care am adăugat bibliotecile. Pe baza rezultatului consolei cu și fără aceste importuri, apelul Java nu se schimbă deloc (cum ar fi, pentru a adăuga directorul la calea clasei)   -  person cdeszaq    schedule 07.12.2011
comment
Vă rugăm să încercați să puneți borcanul direct sub MyAppClient\lib.   -  person Peter Gromov    schedule 08.12.2011
comment
@PeterGromov, Punerea tuturor fișierelor jar în directorul lib funcționează, dar dacă le pun în orice director din acesta, cum ar fi lib/dcm4che/, IDE-ul le poate găsi, nicio problemă, dar Griffon nu poate. Se poate face ceva pentru a remedia acest lucru? Chiar nu mi-ar plăcea să trebuiască să am toate fișierele mele jar într-un director masiv fără organizare, mai ales când mai multe proiecte au nevoie de aceleași lucruri.   -  person cdeszaq    schedule 08.12.2011
comment
Așa funcționează Griffon, scuze. Puteți încerca să gestionați dependențele prin DSL (griffon.codehaus.org/guide/0.9.4/guide/), dar rețineți că IDEA nu acceptă acest lucru în prezent (youtrack.jetbrains.net/issue/IDEABKL-6134), și va trebui să gestionați manual dependențele modulului.   -  person Peter Gromov    schedule 08.12.2011


Răspunsuri (1)


După cum sugerează Peter, fie configurați biblioteca ca dependență folosind DSL de dependență (dacă este disponibilă dintr-un depozit Maven sau ivy), fie o plasați în MyApp/lib (fără subdirectoare suplimentare). Acestea sunt convențiile stabilite de Griffon.

person Andres Almiray    schedule 08.12.2011
comment
Ar fi grozav dacă Griffon s-ar descurca mai ușor să aibă mai multă organizare în directorul MyApp/lib. - person cdeszaq; 20.12.2011
comment
De aceea avem în primul rând dependența DSL. Cu toate acestea, s-ar putea să acceptăm dependențe imbricate în interiorul $app/lib după ce Griffon trece la 1.0. - person Andres Almiray; 20.12.2011