سؤال

أحاول كتابة مهمة Gradle التي تم إنشاؤها على ملفات الحرب إلى مثيل Tomcat المحلي:

هذا لا يعمل ولست متأكدًا من كيفية تصحيحه:

 task deploylocal() << {
    println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
    copy{
      from "${buildDir}\\libs"
      into "${tomcatHome}/webapps"
      include '*.war'
    }
  }

أي أفكار بشأن ما يجب القيام به بعد ذلك؟

هل كانت مفيدة؟

المحلول

بدلاً من ذلك ، قد تكون قادرًا على الاستفادة من Gradle-Tomcat-Plugin

نصائح أخرى

مهمة الحرب تدرك القطع الأثرية التي تولدها.

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}

لقد أنجزت هذا مع:

task deploy (dependsOn: war){
    copy {
        from "build/libs"
        into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
        include "*.war"
    }
}

تشغيله مثل هذا:

gradle deploy

هل يمكن أن تستخدم المساعد Tomcat. يمنعني الإعداد الخاص بي من استخدام/تعديل خيار Out of the Box War & Tomcat.

أنا شخصياً أحب النكهة التالية (تم نسخها من Build.gradle).

tomcat_home='tomcat_location'
tomcat_bin=tomcat_home + '/bin'
tomcat_start=tomcat_bin + '/startup.sh'
tomcat_stop=tomcat_bin + '/shutdown.sh'
tomcat_webapps = tomcat_home + '/webapps'

task tom << {
    if (project.hasProperty('start')) {
        startTom()
    } else if (project.hasProperty('stop')) {
        stopTom()
    } else if (project.hasProperty('deployNstart')) {
        stopTom()
        webappsCopy()
        startTom()
    } else {
        throw new RuntimeException('unrecognized option')
    }
}

def stopTom() {
    executeCmd(tomcat_stop)
}

def startTom() {
    executeCmd(tomcat_start)
}


def executeCmd(command) {
    proc = command.execute()
    proc.waitFor()
}

def webappsCopy() {
    copy {
        from 'war file location' // could be exploded or war itself
        into tomcat_webapps
    }
}

-يمكنك الاتصال بالخيارات المختلفة التي تتضمنها في مهمة "توم" من سطر الأوامر-

$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart

قد ينمو هذا أكثر ، حيث أضيف المزيد من الأوامر/الخيارات المتعلقة بـ Tomcat. عدد قليل من المؤشرات:

  1. انقل الموقع وما إلى ذلك إلى Gradle.properties حتى يتمكن من العمل في بيئات مختلفة.
  2. استطلاع منفذ خادم Tomcat الخاص بك لضبط الخيارات و MSGs.
  3. انتقل إلى رمز البرنامج المساعد/المهمة الذي يمكن إعادة استخدامه.

هذه النسخة المحدودة تعمل بالنسبة لي الآن :-)

يمكنك إعطاء Gradle Cargo Plugin لقطة. يتيح لك نشر ملف حرب على tomcat المحلي وكذلك عن بعد.

من فضلك ، تأكد من أن أرشيف الحرب يتم تجميعه من قبل deploylocal يتم تنفيذ. ربما ، يمكنك تحديد التبعية:

task deploylocal(dependsOn: build) << {

NB هناك خاصية اتفاقية في المكون الإضافي Java مسماة libsDir. يتيح لك الرجوع إلى دليل البناء/libs بطريقة أفضل:

 task deploylocal(dependsOn: build) << {
    println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
    copy{
      from libsDir
      into "${tomcatHome}/webapps"
      include '*.war'
    }
  }

أولا ، محاولة تصحيح. تحقق من ترتيب تنفيذ المهمة ؛ معرفة ما إذا كان يتم تشغيله بعد إنتاج ملف الحرب. أيضا ما إذا كانت تقول محدثة أم لا.

قد تكون المشكلة هي عدم وجود أي تبعيات بين هذه المهمة والمخرجات التي تريد نسخها.

حاول استبدال هذه المهمة العامة بمثال لمهمة النسخ ، وجعلها تعتمد على ملف الحرب الذي تحاول نسخه.

شيء من هذا القبيل:

task deployLocal(type: Copy) { 
    dependsOn configurations.archives.buildArtifacts
    from configurations.archives.allArtifacts*.file 
    into("$tomcatHome/webapps") 
}

في الواقع في وقت لاحق استبدل هذه الوظيفة بمكون من شحنات لـ Gradle و Runn the Deploy by

gradle cargoRunLocal
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top