كيف يمكنني استخدام الجرار المختلفة لتجميع واختبار في Maven؟
-
22-09-2019 - |
سؤال
أقوم بتجميع برنامجي ضد 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>