تحذير Maven "تجاوز الملف الشخصي:'باطل'…"
سؤال
ما هي الأسباب المحتملة للتحذير المخضرم التالي:
Overriding profile: 'null' (source: pom) with new instance from source: pom
لقد حاولت التعليق على ملفي الشخصي الافتراضي بالكامل حيث يشير التحذير إلى "الملف الشخصي"، لكن ذلك لم يساعد.لقد حاولت أيضًا التعليق على خيارات إعداد التقارير الخاصة بي ولا يزال التحذير يظهر.
لقد قمت بتشغيل مخضرم مع -X
يظهر العلم والتحذير فورًا بعد إحضار تبعية hamcrest الخاصة بي، لكن التعليق عليه لا يلغي التحذير.
يحرر: معلومات إضافية لكل طلب:
الإخراج من mvn help:active-profiles
:
Active Profiles for Project 'com.sophware.XXX:main:jar:0.0.1-SNAPSHOT':
The following profiles are active:
- default (source: pom)
الإخراج من mvn help:all-profiles
:
[INFO] Listing Profiles for Project: com.sophware.XXX:main:jar:0.0.1-SNAPSHOT
Profile Id: default (Active: true , Source: pom)
default
هو بالفعل معرف الملف الشخصي الذي أستخدمه في ملف pom الخاص بي.في هذه المرحلة، لدي ملف تعريف واحد فقط، على الرغم من أنني أتوقع إضافة المزيد في المستقبل.
دقة:
لقد كان بيتر على حق بشأن هذه المشكلة.المشكلة تنبع من عدم وجود id
عنصر داخل ملف تعريف مخضرم.في حالتي، تم سحب ملف pom بسبب تبعية miglayout الخاصة بي.
عند البحث في بوم التابع، وجدت أن miglayout، في الواقع، لا يستخدم id
في ملفاته الشخصية:
<profile>
<activation>
<os>
<family>windows</family>
<arch>x86</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>org.eclipse.swt.win32.win32</groupId>
<artifactId>x86</artifactId>
<version>3.3.0-v3346</version>
<optional>true</optional>
</dependency>
</dependencies>
</profile>
هناك عدد من الملفات الشخصية الأخرى المفقودة id
's كذلك، كل منها يتسبب في وجود التحذير.
المحلول
من السهل إعادة إنتاج هذا في Maven 2.2.9.السبب الوحيد لذلك هو أنه تم تعريف ملفين شخصيين مخضرمين بدون عنصر معرف الملف الشخصي في نفس pom.xml، وبالتالي يتم التعامل مع المعرفات على أنها فارغة.لا أعرف ما هي حالة الاستخدام لمثل هذا الملف الشخصي، لكن Maven 2.2.9 يسمح بصمت بوجود مثل هذا الملف الشخصي، إلا إذا حاولت تجاوزه بالطبع - فستحصل على التحذير المذكور.
هنا بوم بسيط من شأنه أن يعيد إنتاج الخطأ.لاحظ المفقودين <id>
عنصر لكل ملف تعريف.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.apache.maven.its.mngxxxx</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>parent</name> <profiles> <profile> <activation> <property><name>foo</name></property> </activation> </profile> <profile> <activation> <property><name>foo</name></property> </activation> </profile> </profiles> </project>
ببساطة اكتب mvn -X validate -Dfoo=true
ويجب أن تشاهد بالقرب من الجزء العلوي من الإخراج رسالة التحذير.يحدث هذا بسبب محاولة تعريف ملف التعريف الثاني تجاوز الأول.
الكود ذو الصلة في Maven 2 الذي يصدر هذا التحذير موجود DefaultProfileManager.java السطر 123.
لقد تغير هذا في Maven 3.باستخدام أحدث إصدار من maven 3.0-alpha-6 الذي تحصل عليه.
[ERROR] The build could not read 1 project -> [Help 1] org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs: [ERROR] profiles.profile.id must be unique but found duplicate profile with id default @ org.apache.maven.its.mngxxxx:parent:1.0-SNAPSHOT, /Users/plynch/dev/apache/maven/core-integration-testing/mytests/mng-xxxx-IT/src/test/resources/mng-xxxx/pom.xml at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:285) at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:402) at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:351) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:171) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:422) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157) at org.apache.maven.cli.MavenCli.main(MavenCli.java:122) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) [ERROR] The project org.apache.maven.its.mngxxxx:parent:1.0-SNAPSHOT (/Users/plynch/dev/apache/maven/core-integration-testing/mytests/mng-xxxx-IT/src/test/resources/mng-xxxx/pom.xml) has 1 error [ERROR] profiles.profile.id must be unique but found duplicate profile with id default [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
لاحظ أيضا أن المفقودين <id>
سيؤدي إلى قيام Maven 3 بتطبيق معرف ملف التعريف "الافتراضي".
أخيرًا، في البناء متعدد الوحدات، إذا قام أحد الوالدين بتحديد ملف تعريف بنفس المعرف الموجود في الطفل، فلا يوجد تحذير أو إشارة أخرى منبعثة من Maven.