2015-08-12 30 views
7

Ho progetto con sottostante strutturaGradle distribuire progetto a orecchio

--MyPrj.ear 
    --APP-INF 
    --src 
    --lib 
    --META-INF 
    --application.xml 
    --weblogic-application.xml 
    --WEB_MAIN 
    --assets 
    --WEB-INF 
     --conf 
     --web.xml 
     --weblogic.xml 

voglio distribuire a PRJ.ear depositare presso seguito struttura:

--MyPrj.ear 
    --APP-INF 
    --classes 
    --lib 
    --META-INF 
    --application.xml 
    --weblogic-application.xml 
    --WEB_MAIN 
    --assets 
    --WEB-INF 
     --conf 
     --web.xml 
     --weblogic.xml 

E qui è la mia configurazione orecchio:

ear { 
    baseName 'PRJ' 
    appDirName 'APP-INF/src' 
    libDirName 'APP-INF/lib' 

    ear{ 
     into("META-INF"){ 
      from("META-INF") { 
       exclude 'application.xml' 
      } 
     } 
     into("WEB_MAIN") { 
      from ("WEB_MAIN") 
     } 
    } 

    deploymentDescriptor { 
     webModule 'WEB_MAIN', '/' 
     applicationName = "PRJ" 
    } 
} 

mio risultato effettivo:

--MyPrj.ear 
    --APP-INF 
    --lib 
    --com 
    --META-INF 
    --application.xml 
    --weblogic-application.xml 
    --WEB_MAIN 
    --assets 
    --WEB-INF 
     --conf 
     --web.xml 
     --weblogic.xml 

non può generare APP-INF/classes

+0

Che problema sono in esecuzione in? – Ethan

+0

Vedo che hai già modificato il tuo 'buid.gradle', quindi il problema è solo nel processo di distribuzione o qualche altra cosa è errata nel tuo file di build? – solar

risposta

2

Comincerò con un'osservazione: Entrambe le istanze di ear nel vostro script di build si riferiscono alla stessa operazione. Non v'è alcuna necessità di fare riferimento a ear due volte, vale a dire le dichiarazioni into possono andare un livello superiore.

In primo luogo, aggiungere la cartella APP-INF/src come un insieme fonte. Ciò comporterà l'aggiunta delle classi compilate alla radice dell'EAR, quindi è necessario escluderle. Poi si deve dire al compito ear per copiare le classi compilate nella directory APP-INF/classes nella EAR:

// Make sure the source files are compiled. 
sourceSets { 
    main { 
     java { 
      srcDir 'APP-INF/src' 
     } 
    } 
} 

ear { 
    baseName 'PRJ' 
    libDirName 'APP-INF/lib' 

    into("META-INF") { 
     from("META-INF") { 
      exclude 'application.xml' 
     } 
    } 
    into("WEB_MAIN") { 
     from("WEB_MAIN") 
    } 

    deploymentDescriptor { 
     webModule 'WEB_MAIN', '/' 
     applicationName = "PRJ" 
    } 

    // Exclude the compiled classes from the root of the EAR. 
    // Replace "com/javathinker/so/" with your package name. 
    eachFile { copyDetails -> 
     if (copyDetails.path.startsWith('com/javathinker/so/')) { 
      copyDetails.exclude() 
     } 
    } 

    // Copy the compiled classes to the desired directory. 
    into('APP-INF/classes') { 
     from(compileJava.outputs) 
    } 

    // Remove empty directories to keep the EAR clean. 
    includeEmptyDirs false 
} 
+0

È fantastico. Lo controllerò. Grazie – Luc

5

Per includere .ear file che si dovrebbe modificare build.gradle aggiungendo apply plugin: 'ear' ad esso e riempire il blocco ear correttamente seguendo le istruzioni in this guide.

Inoltre, la magia del processo di distribuzione è spiegata abbastanza bene here, in breve si tratta di utilizzare lo strumento wideploy in Gradle. Si potrebbe anche voler dare un'occhiata here per trovare alcune informazioni più dettagliate su questo script.

+0

si potrebbe verificare questa domanda http:? //stackoverflow.com/questions/31978589/gradle-custom-ear – Luc

+0

Voglio personalizzato struttura .ear – Luc

+0

che cosa si intende dicendo che non è possibile distribuire il vostro .ear, qualsiasi errori particolari o qualcosa del genere? – solar