Maven 包有效,但 Intellij 的构建失败

Posted

技术标签:

【中文标题】Maven 包有效,但 Intellij 的构建失败【英文标题】:Maven package works but Intellij's build fails 【发布时间】:2013-08-21 10:19:39 【问题描述】:

我有一个 JDK 1.7 项目,它对我的​​ maven 存储库中的本地 jar 具有 maven 依赖项。

我无法使用 Intellij 构建项目,错误是找不到符号(该符号是从本地 jar 导入包的类)

但我可以使用 'mvn package' 成功构建项目。

我花了很多时间寻找解决方案,我已经做过的事情:

缓存无效 'mvn clean install'本地jar依赖 在 Intellij 的 maven 配置中标记为“自动加载快照” 在 Intellij 中重新引入 maven 同步

这个错误发生在我之前几次,但通常只是关闭 Intellij 和/或执行“mvn clean install”就可以了。

请帮忙。

【问题讨论】:

您的 Maven 存储库是否正确配置了 IntelliJ ? 是的,存储库的路径是我使用“mvn install”时更新的路径 本地 jar 是 jar 的快照还是发布版本?如果 jar 是快照,则必须在 intellij Maven 设置中选中“始终更新快照”以强制更新 ide。 是的,这是一个快照,我已经标记了该选项。但仍然没有任何改变:( 在设置的编译器部分,是否选中了“使用外部构建”?并且在Use external build中,“Rebuild module on dependency change”选项也被勾选了? 【参考方案1】:

我知道这已经晚了,但执行 mvn idea:idea 可以解决问题。

该命令会重新生成关键的 IntelliJ IDEA 文件:iprimliws,从而将它们与您的 pom.xml 重新对齐。

文档:https://maven.apache.org/plugins/maven-idea-plugin

该插件已停用,但(截至 2021 年 6 月 5 日)仍然像魔术一样工作 :)

【讨论】:

这应该是公认的答案,因为它提供了一个实际的解决方案,而不仅仅是它失败的原因。我所有的updoots! mvn idea:idea 没有保持更新,也不是由 jetbrains 维护 在那之后我不得不重新运行 mvn install 你把我从绝望中拯救了出来。我想吻你 为什么 intellij 不能在这么多年后独自做到这一点。每次导入新项目时,我仍然需要运行此命令! SMH【参考方案2】:

我也遇到了同样的问题。 从终端使用 maven 命令 (mvn clean install -DskipTests=true) 项目已成功构建。但在 intellij 中无法识别 jar spring 库文件。

使用以下步骤修复它:

    关闭您的 IDE(intellij) 删除 sudo "rm -rf //.idea/" (/home/user/projects/test_proj/.idea/) 再次打开您的IDE。它将重新索引您的文件并解决问题

RCA:我怀疑这是由于 linux 中的权限问题而发生的

【讨论】:

【参考方案3】:

此错误的另一个原因是在 pom.xml 文件中使用了依赖项,例如 lombok。如果你在java文件中使用了@Data等lombok注解,那么你需要在intellij中安装lombok插件来摆脱IDE中的“错误”。

【讨论】:

【参考方案4】:

我遇到了同样的问题。我可以在终端中成功运行mvn clean package 命令,但无法从 IntellJ 运行或构建。我做了以下操作,但都失败了。

缓存无效 在终端中运行 mvn clean packagemvn clean package 在 Intellij 的 maven 配置中标记为“自动加载快照” 同步或重新导入 删除所有与 IntellJ 相关的文件,如 .idea 并重新导入项目 删除所有依赖文件,然后运行mvn clean package 切换 Java 版本或在 IntellJ 中使用嵌入式 Java 运行mvn idea:idea 更改 Maven 主页 在模块选项卡中将 src 目录标记为源

我做的最后一件事是: 删除项目中的.idea和.iml,删除所有依赖文件,然后从电脑中删除IntellJ。重新安装 IntellJ 后,我的项目构建成功。我希望我能有更好的方法来解决这个问题。

【讨论】:

【参考方案5】:

对于 Mac 中的我,我通过从我的计算机中删除 Intellij Idea Appication 并删除缓存文件来解决它 ~/库/应用程序支持/JetBrains/IntelliJIdea2020.1 ~/Library/Caches/JetBrains/IntelliJIdea2020.1

然后重新安装,打开我的项目,构建成功!

【讨论】:

【参考方案6】:

Maven ReImport 为我工作,如下所示...

【讨论】:

IntelliJ IDEA Ultimate 2020.3 具有“重新加载项目”并且有效。【参考方案7】:

对我来说,问题在于我在 IntelliJ Java 编译器设置中选择了 Ajc 编译器。一旦我将它改回 Javac 一切正常。

【讨论】:

【参考方案8】:

就我而言,问题出在不同的 Project Java SDK 版本中。当我从终端构建项目时,maven 使用 Java 8,当我从 IDEA 构建时,它使用 Java 11。

转到文件 > 项目结构...并在项目设置中将项目 SDK 设置为您需要的版本。

【讨论】:

【参考方案9】:
    在 maven 选项卡中单击 + 并选择 pom.xml 从 maven 选项卡单击下载源和文档 在项目结构上(您可以在其中查看项目文件/目录)右键单击您要构建的项目并选择构建模块项目名称。 从选项卡运行 - 使用 + 添加应用程序编辑配置并填写以下字段: 一世。主类-从项目选项卡中手动选择选择主类 ii.使用模块的类路径 - 选择应用程序名称 iii.缩短命令行 - 类路径文件 现在只需运行该应用程序。

【讨论】:

【参考方案10】:

如果配置了错误的模块,请执行以下步骤:

转到项目设置 转到模块 删除不应该存在的模块

【讨论】:

【参考方案11】:

还有一个没有提到的可能性。如果您从com.sun.* 导入库。也会导致这个问题。

程序在 ide 中运行时有效,因为com.sun.* 中的这些类都在jre/lib 目录下,运行时会被加载。但是当您运行mvn package 时,由于自java 1.6 以来oracle 的限制,这些库将无法访问(这些库在某种程度上已被弃用)。为了解决这个问题,你可以添加

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <verbose />
                        <bootclasspath>C:/Program Files/Java/jdk1.8.0_161/jre/lib/rt.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>

记得用你自己的rt.jar路径替换cootclasspath

您可以搜索Access restriction: The type XXX is not accessible due to restriction on required library 了解更多详情。

【讨论】:

【参考方案12】:

删除.idea文件夹并关闭IDE

再次打开 IDE 并导入将重新导入的项目,因为我们之前删除了 .IDEA 文件夹

检查外部库模块,如果它没有填充所需的依赖项,则检查 IDE 中的 maven settings.xml 位置是否正确

【讨论】:

【参考方案13】:

我遇到了同样的问题。 前往:

文件 -> 项目结构 -> 模块。选择您的模块并在“Dependencies”选项卡下,确保添加了所有 maven 依赖项。

为了确保您在创意编辑器中收到类似问题的警告:从“依赖项”选项卡切换到“源”并添加将您的 src 标记为源。

【讨论】:

【参考方案14】:

从命令提示符执行命令:mvn idea:idea 并右键单击项目 -> 从菜单中重新导入依赖项

【讨论】:

【参考方案15】:

这个简单的过程大约需要 1 分钟,没有任何风险。

关闭 IntelliJ 删除 IntelliJ 特定文件,如 .idea/*、*.iml、.settings 等。建议也删除 POM,但恕我直言,这不是必需的。 然后使用以下方法在 IntelliJ 中重新创建项目:文件 > 新建 > 来自现有源的项目 > 按照步骤操作。请注意不要导入多个配置文件或(相同的项目)。

【讨论】:

【参考方案16】:

如果您使用的是 gradle ,请尝试以下命令。这解决了我的问题

gradle cleanIdea idea

【讨论】:

【参考方案17】:

我没有高兴地尝试了上面的一切。然而,我做了一件事最终让它发挥作用:

我去了 C:\Users\.IntellijJIdea2018.2 并删除了整个文件夹。

它会删除 IntelliJ 的所有设置和缓存。我不得不从头开始重新导入我的项目,但之前简单的删除和重新导入不起作用,但这终于让它再次工作了。

【讨论】:

【参考方案18】:

我关闭了项目并通过单击根 pom(不仅仅是文件夹,还有 pom 文件本身)再次导入它。

【讨论】:

【参考方案19】:

我尝试使缓存无效,将 Maven 更改为已安装的版本,但没有任何效果。

关闭并重新创建一个新项目解决了它。

【讨论】:

【参考方案20】:

在我的情况下,我的 iml 不同步,所以我删除了特定模块的 iml,然后在 maven 选项下选择 unignore project 以重新创建 iml

【讨论】:

【参考方案21】:

我发现我的 .iml 文件和 pom 存在冲突并导致了问题。

【讨论】:

我也有类似的问题。我有构建日期插件的配置。此插件需要具有此值“$maven.build.timestamp”的 buildDate 属性。 IntelliJ 在解析这个 pom 时遇到问题,并且 iml 文件没有与 pom 正确同步。当我评论属性 buildDate 同步工作正常。 关于如何解决这个问题的任何提示?我只想让 Intellij 工作,似乎 Netbeans 运行任何项目无论如何......这是一个完整的生产力破坏者:( ... 我不知道你的修复是否相同,但我不得不退出并重新加载项目以强制 IntelliJ 更新它的 IML 文件(它没有像我一样从 pom.xml 刷新它) d 添加了一些新的依赖项) “如何”比“为什么”更有用。请添加一些有关您如何解决此问题的详细信息。 我关闭了 IntelliJ。然后,我删除了C:\Users\USERNAME\.IntelliJIdea2017.2\system。之后,我在源目录中做了一个git clean -xdf 以删除所有非版本控制的文件,并再次导入该项目。现在就像一个魅力。【参考方案22】:

这里的其他答案中有许多有价值的提示,只是想添加解决我的问题的解决方案。

我们最近开始使用私有 Maven 存储库,并且在调用 Maven cmdline 时总是使用mvn -s settings.xml。 IntelliJ 当然不知道私有仓库,所以它需要一点帮助。

转到设置 -> 构建、执行、部署 -> 构建工具 -> Maven 并覆盖“用户设置文件”选项。

【讨论】:

【参考方案23】:

IDE 在构建时使用它自己的 Maven 捆绑副本。如果终端上的 maven 与 IDE 不同,那么您希望它们相同。

转到(在 Mac 上)- IntelliJ Idea -> 首选项 -> 构建、执行、部署 -> 构建工具 -> Maven。设置 Maven 主目录的路径 要从终端查找您使用的 Maven 路径,请键入命令 mvn -version,这应该会打印出包括 dir 路径在内的大量详细信息。把它放在 Maven 主目录中。

为安全起见,您也可以对 JDK 位置执行相同操作

==== 可能导致此类问题的其他一些事情 ===

如果做 mvn package 或 mvn clean install 构建,那么它必须对 IDE 缓存做一些事情。 除其他外,这通常有助于解决此类错误 -->

文件 -> 使缓存无效

【讨论】:

【参考方案24】:

我知道我在这个对话中已经很晚了,但只是想发布这个以防其他人遇到这个问题。发生这种情况的另一个原因是因为您没有引用正确的存储库。 Intellij 默认选择捆绑版本的 jar,而不是来自您自己的 maven 存储库的版本。确认连接的存储库是正确的。

【讨论】:

如果您使用自制软件安装了 maven,正确设置 maven 主目录(例如)/usr/local/Cellar/maven/3.5.4/libexec 可以解决此问题【参考方案25】:

添加更多提示,因为这是我遇到类似问题(项目构建在 mvn,而不是 IntelliJ)时在搜索中出现的第一件事,以防它可能对其他人有所帮助。

当我有这个时,它在 Windows 和 Mac 上是不同的修复程序。

在 Mac 上,我进入 ItellijIDEA / Preferences / Build, Execution, Deployment / Build Tools / Maven / Maven Home Directory 并将其设置为使用我单独安装的 Maven 而不是捆绑的 Maven。所有构建问题都消失了。

在 Windows 上,我在 idea.log 中看到与 SSL 相关的异常,并且我的项目树在 External Libraries 分支下只有 Java。从其他站点来看,听起来 IntelliJ 使用自己的私有 JDK 而不是系统 JDK(即使在我的情况下,我已经安装了完全相同的 JDK 版本)。我的系统 JDK 在公司 Nexus 服务器的密钥库中安装了 IntelliJ 私有 JDK 没有的证书,因此当它尝试从 Nexus 获取文件时会引发异常。为此,解决方案是退出 IntelliJ,设置一个名为 IDEA_JDK 的环境变量以指向我已经安装的具有正确证书的 JDK,然后重新启动 IntelliJ。所有构建问题都消失了。

【讨论】:

最新 IntelliJ 2016.3.5 在 Linux 上的相同问题 - 首先它工作,然后在一些 POM 更改后它变得不同步,只有切换 Maven impl 有帮助,所以也可能只是切换Maven 触发 IntelliJ 中的更新,导致项目再次同步... 你很好。这解决了我的问题。谢谢【参考方案26】:

我遇到了同样的问题。我在 Idea 设置中将 maven 版本从 3.0.5 更改为 3.0.4,现在一切正常。不知道为什么这对我有帮助。

【讨论】:

【参考方案27】:

尝试删除所有 .iml 和您的 POM。 然后将您的 POM 再次复制并粘贴到您的项目中,然后重新打开并重新导入它。

【讨论】:

也许在删除任何东西之前尝试在 Maven 项目视图中“重新导入所有” 我也不得不删除.iml,重新导入maven没有修复它。 @masoodg,非常感谢!你救了我的一天!只是重新导入没有帮助。按照你的指示,它就像一个魅力。 关闭 Intellij,从项目根目录中删除 *.iml*.ipr*.iws 文件,然后重新打开 Intellij 为我修复了它 哇。伟大的。删除 .iml 对我有用。【参考方案28】:

“symbol cannot be found”表示intellij无法解析“依赖”。因此,您可以通过单击“分析”->“分析依赖关系”然后选择“分析范围”来强制“依赖关系分析”

【讨论】:

以上是关于Maven 包有效,但 Intellij 的构建失败的主要内容,如果未能解决你的问题,请参考以下文章

新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目

IntelliJ IDEA更新maven依赖包

Maven项目已建立,但是在IntelliJ IDEA中似乎没有依赖项

在 IntelliJ 中找不到 Maven java-doc 插件

Mac OS配置Maven环境教程(IntelliJ IDEA)

Intellij IDEA在maven项目中添加外部Jar包运行