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 文件:ipr
、iml
和 iws
,从而将它们与您的 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 /
RCA:我怀疑这是由于 linux 中的权限问题而发生的
【讨论】:
【参考方案3】:此错误的另一个原因是在 pom.xml 文件中使用了依赖项,例如 lombok。如果你在java文件中使用了@Data等lombok注解,那么你需要在intellij中安装lombok插件来摆脱IDE中的“错误”。
【讨论】:
【参考方案4】:我遇到了同样的问题。我可以在终端中成功运行mvn clean package
命令,但无法从 IntellJ 运行或构建。我做了以下操作,但都失败了。
mvn clean package
或 mvn 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项目
Maven项目已建立,但是在IntelliJ IDEA中似乎没有依赖项
在 IntelliJ 中找不到 Maven java-doc 插件