it-swarm.com.ru

Свойства в родительском определении запрещены в IntelliJ Maven на моем Mac OSX

У меня есть вопрос о моей конфигурации maven на моем MAC Intellij. Я получаю сообщение об ошибке, что $ {lego-web.version} «свойства в родительском определении запрещены» внутри родительского тега в дочернем POM.xml и что свойства определены в родительском POM.xml . Но эта же конфигурация хорошо работает на Мой Windows Intellij.

Ниже мой родитель 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>

И это мой дочерний 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>
    <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>

Я перепробовал много методов из stackoverflow, но никто не может это исправить. Я хочу знать, почему этот конфиг Maven имеет различное поведение в Mac и Windows, и как это исправить.

6
王昭辉

Я столкнулся с очень похожей ситуацией, когда проект начал использовать свойства родительской версии в коммите, который я только что извлек. Проект не строился и чувствовал себя "плохо импортированным". Попытка показать эффективный pom потерпела неудачу без каких-либо подробностей, представленных IDEA.

Как отметил @khmarbaise в комментариях [1], существуют некоторые ограничения на использование свойств в родительских объявлениях - наиболее заметным из них является maven 3.5+. IDEA, возможно, недостаточно использует maven (установленный в последней IDEA, который я установил, был слишком старый), поэтому мне пришлось переключиться на локальную установку с помощью Settings> Build, Execution, Deployment > Инструменты сборки> Maven> Домашний каталог Maven. Однажды указав на более новую версию, он не сразу начал работать - некоторые из процедур перезапуска/перестроения/повторного импорта привели к тому, что новый параметр вступил в силу, и проект успешно импортировал и снова строил.

Несмотря на то, что требование версии maven было введено в pom, это не заставило IDEA жаловаться на версию maven, которую он использует, является старой. Не помогло и отсутствие каких-либо подробностей о том, что IDEA не может проверить проект с помощью maven, который он использует. Теперь, когда все остальное работает, в файлах pom все еще говорится «Свойства родительского определения запрещены».

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

5
Oliver Gondža

Работа для меня в идее 18.2:

1) Не используйте встроенный Maven. Установите Maven с официального сайта! Это поможет мне (^_^)

2) Вы можете попробовать добавить groupId в дочерний pom, поставив <groupId>com.iqiyi.lego.web</groupId> перед строкой <artifactId>legoweb-web</artifactId>.

Попробуйте этот код:

<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>

Я думаю, это потому, что когда вы отправляете скомпилированный jar в центральный maven или приватный maven, такой как nexux, вы можете найти версию в META-INF/maven/xxxxx/pom.xml подпроекта: 

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

не реальное значение <version>1.0.0</version>.so, когда вы хотите выпустить одну банку, вы не можете получить истинную версию 

0
user9274965