2015-08-12 3 views
7

У меня есть проект с ниже структурыGradle развернуть проект на ухо

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

Я хочу, чтобы развернуть в PRJ.ear файл с ниже структурой:

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

А вот моя конфигурация уха:

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" 
    } 
} 

Мой фактический результат:

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

Не удается создать APP-INF/classes

+0

Какие проблемы вы бежите в? – Ethan

+0

Вижу, вы уже изменили свой 'buid.gradle', так что проблема только в том, что происходит процесс развертывания или что-то еще не так с вашим файлом сборки? – solar

ответ

2

Я начну с наблюдения: Оба экземпляра ear в вашем скрипте сборки относятся к одной и той же задаче. Нет необходимости ссылаться на ear дважды, то есть объявления into могут идти на один уровень вверх.

Сначала добавьте папку APP-INF/src в качестве источника. Это приведет к добавлению скомпилированных классов в корень EAR, поэтому вы должны их исключить. Тогда вы должны сказать ear задачу копировать скомпилированные классы в каталог APP-INF/classes в 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

Это здорово. Я проверю. спасибо – Luc

5

.ear Чтобы включить файл, который вы должны изменить build.gradle, добавив к нему apply plugin: 'ear' и заполнению ear блока правильно, следуя инструкции в this guide.

Кроме того, магия процесса развертывания довольно хорошо объяснена here, в скором времени речь идет об использовании инструмента wideploy в Gradle. Вы также можете посмотреть here, чтобы найти более подробную информацию об этом скрипте.

+0

Вы можете проверить этот вопрос? Http: //stackoverflow.com/questions/31978589/gradle-custom-ear – Luc

+0

Я хочу настроить пользовательскую структуру – Luc

+0

, что вы имеете в виду, говоря, что вы не можете развернуть ваш .ear, any конкретные ошибки или что-то еще? – solar