كيف يمكنني استخدام الجرار المختلفة لتجميع واختبار في Maven؟

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

سؤال

أقوم بتجميع برنامجي ضد Javaee-api. ولكن للاختبار Junit يجب أن أستخدم تطبيقًا محددًا مثل Glassfish's Javaee.jar لتجنب أخطاء مثل java.lang.classformaterror: سمة رمز غائب في الطريقة التي ليست أصلية أو مجردة في ملف الفئة javax/pressistence/pronsistence (أنظر أيضا 1).

لذا تجنب استخدام الأساليب ، التي تتوفر فقط في تنفيذ Glassfish ، أريد تجميع القطع الأثرية الخاصة بي مع API العام ، ولكن ركض مع جرة التنفيذ. لكن كلاهما يوفر فئات مساوية وموضعات استدلال ، لذلك يواجه محمل الفصل مشكلة.

ما هي أفضل طريقة لحل هذه المشكلة؟ هل يمكنني حل هذه المشكلة مع مافن؟

شكرًا جزيلاً

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

المحلول

أعتقد أن هذا ممكن. في الواقع ، بدءًا من الإصدار 2.0.9 ، يستخدم Maven ترتيب POM لبناء ClassPath ، حتى تتمكن من معالجة ذلك الآن. وإذا قمت بدمج هذا مع نطاق التبعية, ، يجب أن يكون من الممكن تحقيق ما تريد. من الناحية العملية ، إذا وضعت الأسماك الزجاجية javaee التبعية (مع أ اختبار الكائن) قبل ال javaee-api التبعية ، يجب وضع الأول قبل وقت لاحق في Test Classpath وبالتالي يستخدمه اختبارات الوحدة بينما سيتم استخدام اللاحق أثناء الترجمة. من الناحية النظرية ، يجب أن ينجح هذا ولكنه هش نوعًا ما ، لذا يجب توثيقه بعناية.

شيء من هذا القبيل (مع جرة GFV3 خيالية):

<dependencies>
  <dependency><!-- this one will be first on the test classpath -->
    <groupId>org.glassfish</groupId>
    <artifactId>javaee</artifactId>
    <version>6.0</version>
    <scope>test</scope>
  <dependency>
  <dependency><!-- this one will be used during compile -->
    <groupId>javax.javaee-api</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
    <scope>provided</scope>
  <dependency>
  ...
</dependencies>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top