في الاعتدال ، هل من الممكن وضع علامة على حزمة OSGI كما بدأت من P2.inf الخاص بها؟

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

  •  28-09-2019
  •  | 
  •  

سؤال

لدي ميزة Eclipse التي تتضمن عدة حزم. أريد أن أخبر P2 بمناسبة إحدى هذه الحزم كما بدأت عند تثبيت الميزة. هذا ممكن باستخدام الحزم الخاصة بـ meta-inf/p2.inf مثل ذلك ،

instructions.configure = markStarted(started: true)

لكنني أريد أن أفعل ذلك على مستوى الميزة بدلاً من مستوى الحزمة (الحزمة المعنية هي طرف ثالث ، وأفضل عدم تعديلها بأي شكل من الأشكال ، إن أمكن).

دفعتني بعض الأبحاث إلى هذا المستند مما يشير إلى أنه يجب أن يكون من الممكن نقل تعليمات التكوين إلى P2.inf الخاص بميزة. لقد جربت كل الأشياء الواضحة مثل ،

units.0.id = <bundle symbolic name>
units.0.instructions.configure = \
  org.eclipse.equinox.p2.touchpoint.eclipse.markStarted(started: true)

لكن حتى الآن ، لم يكن لأي من التباديل التي جربتها أي تأثير: كما يحدث في أي شيء ، لم يتم وضع علامة على الحزمة كما بدأت ولا يتم الإبلاغ عن أي أخطاء).

أي مؤشرات ستكون موضع ترحيب للغاية. IS مع Eclipse Equinox Galileo (3.5.2) ... ستكون الإجابات المتعلقة بـ Helios مفيدة للغاية.

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

المحلول

"الوحدات.#." P2.inf إدخالات إنشاء جديد وحدة قابلة للتثبيت, ، لا يعدلون IUS الأخرى الموجودة.

عليك في الأساس إنشاء كامل جزء وحدة قابل للتثبيت. الشظية لها التعليمات ذات الصلة وتعلق على IU حزمة. ثم تحتاج إلى إضافة متطلبات من ميزةك إلى هذا IU الجديد.

يقوم PDE/Build بذلك تلقائيًا عند بناء المنتجات. يمكنك رؤية p2.inf التي تم إنشاؤها عن طريق إنشاء إنشاء منتج RCP صغير والذي يحتوي على مستوى بدء لطفلك.
سيكون p2.inf الذي تم إنشاؤه في بناء المنتج buildDirectory/features/org.eclipse.pde.build.container.feature/product/p2.inf

فيما يلي مثال قمت بتعديله من بناء يحدد مستوى البداية org.eclipse.equinox.common. ال $version$ سيتم استبداله بالنسخة من الميزة التي ينتمي إليها p2.inf. لاحظ "hostrequirements" ، والتي تحدد الحزمة التي نحن جزء من.

#create a requirement on the IU fragment we are creating
requires.2.namespace=org.eclipse.equinox.p2.iu
requires.2.name=configure.org.eclipse.equinox.common
requires.2.range=[$version$,$version$]
requires.2.greedy=true

#create a IU frament named configure.org.eclipse.equinox.common
units.0.id=configure.org.eclipse.equinox.common
units.0.version=$version$
units.0.provides.1.namespace=org.eclipse.equinox.p2.iu
units.0.provides.1.name=configure.org.eclipse.equinox.common
units.0.provides.1.version=$version$
units.0.instructions.install=installBundle(bundle:${artifact});
units.0.instructions.uninstall=uninstallBundle(bundle:${artifact});
units.0.instructions.unconfigure=setStartLevel(startLevel:-1);markStarted(started:false);
units.0.instructions.configure=setStartLevel(startLevel:2);markStarted(started:true);
units.0.hostRequirements.1.namespace=osgi.bundle
units.0.hostRequirements.1.name=org.eclipse.equinox.common
units.0.hostRequirements.1.range=[3.6.0.v20100503,3.6.0.v20100503]
units.0.hostRequirements.1.greedy=false
units.0.hostRequirements.2.namespace=org.eclipse.equinox.p2.eclipse.type
units.0.hostRequirements.2.name=bundle
units.0.hostRequirements.2.range=[1.0.0,2.0.0)
units.0.hostRequirements.2.greedy=false
units.0.requires.1.namespace=osgi.bundle
units.0.requires.1.name=org.eclipse.equinox.common
units.0.requires.1.range=[3.6.0.v20100503,3.6.0.v20100503]
units.0.requires.1.greedy=false

إجابات على الأسئلة:

  1. 0 ، 1 ، 2's

    هذه الأرقام تعسفية إلى حد ما ، فهي تعمل فقط لفصل مجموعة واحدة من الخصائص (requires أو units أو أيا كان) من آخر. ال requires استخدمت هنا "2" ببساطة لأنني قمت بنسخه من p2.inf كبير تم إنشاؤه بواسطة pde.build ونسيت تغييره كما فعلت الوحدات .0.

  2. هل كل هذا ضروري؟

    نعم. الثاني hostRequirements على النوع = الحزمة مطلوب. في Helios ، باستثناء شظايا الترجمة ، يمكن إرفاق جزء واحد فقط بـ IU. بشكل عام ، يتوفر IU الافتراضي الذي يحدد مستوى البدء الافتراضي لجميع حزم OSGI. لكي يتم اختيار جزءنا المخصص على الشظية الافتراضية ، يجب أن يكون له "خصوصية" أعلى وهو عدد متطلبات المضيف الراضية.

    من أجل "التثبيت"

    الوحدات. الوحدات.

    ال instructions.install و instructions.uninstall الرجوع إلى مراحل عملية P2. ال installBundle و uninstallBundle الرجوع إلى التثبيت/إلغاء التثبيت بمعنى OSGI. يجب تثبيت حزمةك في نظام OSGI قبل أن تتمكن من فعل أي شيء آخر. هذا يفي بشكل أساسي بإضافته إلى config.ini أو org.eclipse.equinox.simpleconfigurator/bundles.info.

    ستحتوي معظم عمليات تثبيت P2 بالفعل على تكوين افتراضي من سيقوم بتثبيت مستوى البدء الافتراضي (4) للتكوين الافتراضي. ومع ذلك ، يمكن حاليًا تطبيق جزء تكوين واحد فقط على كل حزمة ، لذلك عندما تضيف مثل هذا ، لم يعد تطبيق الافتراضي على حزمةك.

  3. hostrequirements. تصف صفحة شظايا الوحدة القابلة للتثبيت فقط ماهية الشظية دون أي مرجع حول كيفية إنشاء واحدة. تم ذكره بشكل رائع على تخصيص البيانات الوصفية صفحة ، ولكن لم يتم شرحها.

    الوثائق ، هناك مجموعة من الأشياء على الويكي تحت P2 فئة. الصفحة على تعليمات نقطة اللمس قد تكون مثيرة للاهتمام. هناك بعض المساعدة Help.eclipse.org, ، لكن بشكل عام ، أعتقد أن هذا أكثر تقدماً بعض الشيء لما يوجد به وثائق.

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