web-dev-qa-db-ja.com

Mac OS XのIntellij Mavenで親定義のプロパティが禁止されています

MAC IntellijでのMaven設定について質問があります。子POM.xmlの親タグ内で$ {a-web.version}「親定義のプロパティは禁止されています」というエラーが表示され、そのプロパティは親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>***</groupId>
   <artifactId>a-web</artifactId>
   <packaging>pom</packaging>
   <version>${a-web.version}</version>
   <name>a-web project</name>
   <url>http://***</url>

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

   <modules>
       <module>a-core</module>
       <module>a-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>a-web</artifactId>
        <groupId>***</groupId>
        <version>${a-web.version}</version>
        <relativePath>../</relativePath>
    </parent>

    <artifactId>aweb-web</artifactId>
    <version>${a-web.version}</version>
    <packaging>war</packaging>
    <name>aweb-web</name>
</project>

私はstackoverflowから多くの方法を試しましたが、誰もそれを修正できません。このMaven構成がMacとWindowsで異なる動作をする理由と修正方法を知りたいです。

12
王昭辉

私が引っ張ったコミットでプロジェクトが親バージョンのプロパティを使用し始めたとき、私は非常によく似た状況に遭遇しました。プロジェクトはビルドされず、「不適切なインポート」を感じました。効果的なPOMを表示する試みは失敗しましたが、IDEAによって詳細が提示されませんでした。

@khmarbaiseがコメント[1]で指摘したように、maven <parent>宣言でのプロパティの使用にはいくつかの制限があります-最も注目すべきはmaven 3.5+が必要です。 IDEAは十分に新しいMavenを使用していない可能性があるため(インストールした最新のIDEAにバンドルされているものは古すぎます)、を使用してローカルインストールに切り替える必要がありました設定>ビルド、実行、展開>ビルドツール> Maven> Mavenホームディレクトリ。新しいバージョンを指定しても、すぐには機能しませんでした。一部の再起動/再構築/再インポートルーチンにより、新しい設定が有効になり、プロジェクトが正常にインポートおよび再構築されました。

Mavenバージョンの要件はpomで強制されましたが、使用するMavenバージョンが古いことをIDEAから不満に思わせることはありません。 IDEAが使用するMavenでプロジェクトの検査に失敗するという詳細の欠如も助けにはなりませんでした。これで、他のすべてが機能する場合でも、pomファイルで「親定義のプロパティは禁止されています」と表示されます。

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

15
Oliver Gondža

Idea 18.2で私のために働く:

1)埋め込みMavenを使用しないでください。公式サイトからMavenをインストールしてください!助けてくれます(^_^)

2)子pomにgroupIdを追加して、<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>

親pom.xmlでプロパティrevisionを設定し、それを子に継承すると、問題が修正されました。

<groupId>com.Java</groupId>
<artifactId>test</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>

<name>Test</name>
<description>Demo project for Spring Boot</description>

<modules>
    <module>backend</module>
    <module>frontend</module>
</modules>

<properties>
    <revision>1.0.0-SNAPSHOT</revision>
</properties>

子のpom.xmlで:

<parent>
    <artifactId>com.Java</artifactId>
    <groupId>test</groupId>
    <version>${revision}</version>
</parent>

<artifactId>backend</artifactId>

Maven 3.6.1を使用します

0
Peter S.

IntelliJ IDEAバグです。

少なくともIntelliJでIDEA 2019.2(Ultimate Edition)Build#IU-192.5728.98、2019年7月23日にビルド

0
RoutesMaps.com

コンパイルされたjarを中央のMavenまたはNexusなどのプライベートMavenにプッシュすると、サブプロジェクトのMETA-INF/maven/xxxxx/pom.xmlでバージョンを見つけることができると思う

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

実際の値ではない<version>1.0.0</version>。so単一のjarをリリースする場合、真のバージョンを取得できません

0
user9274965