web-dev-qa-db-fra.com

Les propriétés en définition parent sont interdites dans l'intell maven sur mon mac osx

J'ai une question à propos de la configuration de mon navigateur sur mon MAC Intellij. Un message d'erreur m'indique que $ {lego-web.version} "les propriétés de la définition parent sont interdites" dans la balise parent du fichier POM.xml enfant et que les propriétés sont définies dans le fichier parent POM.xml . Mais cette même configuration fonctionne bien. mon Windows Intellij.

Ci-dessous, mon parent POM.xml.

<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>com.iqiyi.lego.web</groupId>
   <artifactId>lego-web</artifactId>
   <packaging>pom</packaging>
   <version>${lego-web.version}</version>
   <name>lego-web project</name>
   <url>http://lego.iqiyi.com</url>

   <properties>
       <lego-web.version>1.0.0</lego-web.version>
   </properties>

   <modules>
       <module>lego-core</module>
       <module>lego-web</module>
   </modules>
</project>

Et voici mon enfant POM.xml qui configure un bloc parent.

<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>
    <parent>
        <artifactId>lego-web</artifactId>
        <groupId>com.iqiyi.lego.web</groupId>
        <version>${lego-web.version}</version>
        <relativePath>../</relativePath>
    </parent>

    <artifactId>legoweb-web</artifactId>
    <version>${lego-web.version}</version>
    <packaging>war</packaging>
    <name>legoweb-web</name>
</project>

J'ai essayé beaucoup de méthodes de stackoverflow, mais personne ne peut le réparer. Je veux savoir pourquoi cette configuration Maven a un comportement différent sous Mac et sous Windows et comment la corriger.

6
王昭辉

J'ai rencontré une situation très similaire lorsque le projet a commencé à utiliser les propriétés de version parent dans le commit que je viens d'extraire. Le projet ne se construirait pas et se sentirait "mal importé". Une tentative pour montrer un pom efficace a échoué sans aucun détail présenté par IDEA.

Comme @khmarbaise l'a souligné dans les commentaires [1], certaines restrictions s'appliquent à l'utilisation des propriétés dans les déclarations parentes - la plus notable étant maven 3.5+ est requise. Il est possible que IDEA n'utilise pas assez maven new (celui fourni dans le dernier IDEA que j'ai installé était trop ancien). J'ai donc dû passer à une installation locale à l'aide de Paramètres> Construction, exécution, déploiement. > Outils de compilation> Maven> Répertoire de base Maven. Une fois pointé vers la version plus récente, cela ne fonctionnait pas immédiatement - certaines routines de redémarrage/reconstruction/réimportation ont rendu le nouveau paramètre efficace et le projet a été importé et reconstruit avec succès.

Bien que l'exigence de la version maven ait été imposée dans pom, cela n'a pas amené IDEA à se plaindre car la version maven utilisée est ancienne. L'absence de détails indiquant que IDEA n'a pas pu inspecter le projet avec le navigateur qu'il utilise n'a pas aidé non plus. Désormais, lorsque tout le reste fonctionne, le message "Les propriétés de la définition parente sont interdites" dans les fichiers pom.

[1] https://maven.Apache.org/maven-ci-friendly.html

5
Oliver Gondža

Travailler pour moi dans l'idée 18.2:

1) Ne pas utiliser Maven intégré. Installez Maven depuis le site officiel! C'est m'aider (^_^)

2) Vous pouvez essayer d’ajouter un ID de groupe dans le pom de l’enfant, mettez <groupId>com.iqiyi.lego.web</groupId> avant la ligne <artifactId>legoweb-web</artifactId>.

Essayez ce code:

<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>
    <parent>
        <artifactId>lego-web</artifactId>
        <groupId>com.iqiyi.lego.web</groupId>
        <version>${lego-web.version}</version>
        <relativePath>../</relativePath>
    </parent>

    **<groupId>com.iqiyi.lego.web</groupId>**
    <artifactId>legoweb-web</artifactId>
    <version>${lego-web.version}</version>
    <packaging>war</packaging>
    <name>legoweb-web</name>
</project>

Je pense que c’est parce que, lorsque vous envoyez le fichier compilé à un maven central ou à un maven privé tel que nexux, vous pouvez trouver la version dans META-INF/maven/xxxxx/pom.xml du sous-projet: 

<version>${lego-web.version}</version>

valeur non réelle <version>1.0.0</version>.so lorsque vous souhaitez publier un seul fichier jar, vous ne pouvez pas obtenir la version vraie 

0
user9274965