كيف أقوم بإنشاء العديد من الجرار EJB في مشروع بناء Gradle؟

StackOverflow https://stackoverflow.com/questions/3627791

  •  26-09-2019
  •  | 
  •  

سؤال

لديّ بناء متعدد المشروع وفي كل من المشاريع ، لدي عدة حزم في شجرة SRC الرئيسية والتي تحتاج إلى تعبئة بشكل منفصل عن بقية SRC كأفثار EJB الفردية:

com/foo/ejb/ejb1
com/foo/ejb/ejb2
...

يمكن أن يكون هناك عدد تعسفي لهذه EJBs في كل مشروع (0 أو عدة). سؤالي هو ، كيف يمكنني إنشاء مهمة يمكن ، لكل مشروع ، جرة كل من هذه القطع الأثرية المنفصلة بعد التجميع/الجرة العادية؟ أي أنه انتهى بي الأمر باتباع القطع الأثرية لكل مشروع:

project.jar (usual Java classes) 
ejb1.jar (MyEjb1Home/Remote/Bean.class, META_INF/[descriptors])
ejb2.jar (MyEjb2Home/Remote/Bean.class, META_INF/[descriptors])
...

يجب أن تكون المهمة (المهام) شيئًا يمكنني مشاركته في كل مشروع (لذلك ربما يتم تعريفه في مشروع الجذر) والذي سيجد تلقائيًا EJB SRC وإنشاء جرة لكل منهما ، دون الحاجة إلى تحديد EJBs بشكل صريح في المخزون الفرعي (ولكن ربما أ مجموعة الممتلكات "احتضان" لتضييق المشاريع الفرعية التي تحتوي على EJBs).

أنا أفكر على غرار استخدام filetree للاستيلاء على حزمة SRC (com.foo.ejb.*) ثم التكرار و jar-ing-ولكن كيفية القيام بهذه الجرة في سياق المهام وهو ما هو ما هو أواجه مشكلة.

شكرا على أي مساعدة ، كريس.

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

المحلول 2

انتهى بي الأمر القيام بما يلي. في [الجذر] /build.gradle:

afterEvaluate { project ->
    if (project.hasProperty('containsEjbs'))
    {
        def basePath = '/com/foo/ejb'
        def classesDir = project.sourceSets.main.classesDir
        def ejbRootClassesDir = file(classesDir.getPath() + basePath)
        def srcFileDirs = project.sourceSets.main.java.srcDirs.collect { file(it.getPath() + basePath) }.findAll { it.exists() && it.isDirectory() }
        def ejbDirs = srcFileDirs.collect { it.listFiles() }.flatten()
        def ejbs = ejbDirs.findAll { it.listFiles().findAll { f -> f.name == 'META-INF'} }
        ejbs.each { file ->
            task "jarEjbFor_$file.name" (type: Jar, dependsOn:classes) {
                baseName = "$file.name"
                classifier = 'ejb'
                from fileTree(file).include('META-INF/**')
                into ("$basePath/$file.name")
                {
                    from fileTree( ejbRootClassesDir.getPath() + "/$file.name" )
                }
            }
        }
    }

لذلك إذا كان لدى أي مشاريع خاصية "تحتوي على jbs = true" ، فسيتم إضافة مهام لكل حزمة EJB الموجودة تحت "/com/foo/ejb" في كل مشروع (Sub). نقوم بتخزين meta-inf مع واصفات في نفس الشجرة المصدر كطبقات ، لذلك قد يكون هناك تعديلات مطلوبة لإعدادك.

نصائح أخرى

يمكنك ببساطة تحديد مهمة جديدة من النوع: جرة

task('ejb1', type: Jar) {
  //describe jar contents here as a CopySpec
}

يجب تشغيل هذه المهمة تلقائيًا في مرحلة بناء "التجميع". الوصف الكامل للميزات المتوفرة في http://www.gradle.org/0.9-rc-1/docs/userguide/userguide_single.html#artifact_management

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