Maven avvertimento “Prioritario profilo: 'null' ...”
Domanda
Quali sono le possibili cause del seguente avviso Maven:
Overriding profile: 'null' (source: pom) with new instance from source: pom
Ho provato commentando il mio intero profilo predefinito come l'avvertimento menziona "profilo", ma che non ha aiutato. Ho anche provato a commentare le mie opzioni di reporting e l'avviso mostra ancora in su.
Ho ho fatto funzionare Maven con la bandiera -X
e l'avviso si presenta subito dopo la mia dipendenza hamcrest viene portato in, ma commentando fuori non elimina l'avvertimento.
Modifica informazioni aggiuntive per ogni richiesta:
Output da 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)
Output da 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
è infatti l'id del profilo che uso nel mio pom. A questo punto, ho solo un profilo, anche se mi aspetto di aggiungere di più in futuro.
Risoluzione:
Peter aveva ragione sul problema. Il problema nasce dal non avere un elemento id
all'interno di un profilo Maven. Nel mio caso, un file pom è stato tirato in causa della mia dipendenza miglayout.
Al momento guardando attraverso il dipendente pom del, ho scoperto che miglayout, infatti, non usa id
di nei suoi profili:
<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>
C'è un certo numero di altri profili manca di id
così come pure, ognuno dei quali causano l'avvertimento di essere presente.
Soluzione
Questo è facile da riprodurre in Maven 2.2.9. L'unica causa di questo è due maven profili vengono definiti senza un elemento di profilo id nella stessa pom.xml, così i ids sono trattati nullo. Io non so quale sia il caso d'uso per un tale profilo è, ma Maven 2.2.9 permette silenziosamente un tale profilo di esistere, a meno che non si tenta di ignorarlo, naturalmente -. Si ottiene l'avvertimento citato
Ecco una semplice pom che riprodurre l'errore. Si noti l'elemento <id>
mancante per ogni profilo.
<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>
È sufficiente digitare mvn -X validate -Dfoo=true
e si dovrebbe vedere vicino alla parte superiore uscita il messaggio di avviso. Questo è causato dal secondo definizione del profilo cercando di ignorare la prima.
Il codice rilevante in Maven 2 che emette questo avviso è in DefaultProfileManager.java linea 123.
In Maven 3, questo è cambiato. Utilizzando le più recenti Maven 3.0-alfa-6 che si ottiene.
[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
Si noti inoltre che il <id>
mancante causerà Maven 3 per applicare un 'default' profilo id.
Infine in una costruzione multi-modulo, se un genitore pom definire un profilo con lo stesso ID come uno nel bambino, non v'è alcun avviso o altra indicazione emessa da Maven.