Intellij maven "cannot resolve symbol" 即使打包成功
Intellij maven "cannot resolve symbol" even though package was successful
我的问题:
我创建了一个 Maven 项目。我导入了一个存储库(称为 Kumo)。在 Maven 配置 XML 文件中,我没有出现任何错误。当我尝试使用 类.
之一时出现错误
它告诉我:Cannot resolve symbol 'WordCloud'
我尝试过的(我认为)没有结果:
- 正在使缓存失效
- 正在重启 IntelliJ
- 正在重新导入所有 Maven 项目按钮
- 生成源按钮
- 下载源按钮
- 添加编译 XML 标签
- 尝试在 Windows 上创建此项目会产生相同的结果
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>kumo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo</artifactId>
<version>1.11</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Test_1.java:
public class Test_1 {
WordCloud cloud;
FrequencyAnalyzer analyzer;
}
Test_2.java:
package Example;
public class Test2 {
WordCloud cloud;
FrequencyAnalyzer analyzer;
}
最疯狂的事情。显然 1.11 版的 Maven repository 没有与之关联的 JAR,因此无法直接添加。相反,4 个子模块中的每一个都必须直接添加它们的依赖项,然后突然间它就可以工作了。我不确定 为什么 是这种情况,因为整个包将它们作为依赖项包含在内。不过,在与我的动物讨论后,我已经解决了自己的问题。
您是否应该更新 maven 以下载依赖项并将 WordCloud class 导入您的 java 文件?这个错误可能是由于 IDE 找不到 class.
根据 kumo github repository 的建议,您应该使用以下依赖项而不是 <artifactId>kumo</artifactId>
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo-core</artifactId>
<version>1.11</version>
</dependency>
让我们向您解释为什么 <artifactId>kumo</artifactId>
不起作用。这个 pom 使用 <project><dependencyManagement>
来公布依赖信息。 Maven 将从 <project><dependencies>
部分而不是 <project><dependencyManagement>
导入依赖项。
您可以在 ${user}\.m2\repository\com\kennycason\
(windows).
的本地 Maven 存储库中查看 kumo
的 pom
而Maven的dependencyManagement主要用于以下项目,
- 当您拥有一组继承共同父项的项目时,可以将有关依赖项的所有信息放在共同 POM 中,并在子 POM 中更简单地引用工件。
- 控制传递依赖项中使用的工件版本。这意味着如果您在
<dependencyManagement>
部分中定义了工件的版本,那么您可以在 <dependencies>
部分中声明它而无需版本。
您也可以参考Introduction to the Dependency Mechanism获取更多示例以进一步学习。
我的问题:
我创建了一个 Maven 项目。我导入了一个存储库(称为 Kumo)。在 Maven 配置 XML 文件中,我没有出现任何错误。当我尝试使用 类.
之一时出现错误
它告诉我:Cannot resolve symbol 'WordCloud'
我尝试过的(我认为)没有结果:
- 正在使缓存失效
- 正在重启 IntelliJ
- 正在重新导入所有 Maven 项目按钮
- 生成源按钮
- 下载源按钮
- 添加编译 XML 标签
- 尝试在 Windows 上创建此项目会产生相同的结果
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>kumo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo</artifactId>
<version>1.11</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Test_1.java:
public class Test_1 {
WordCloud cloud;
FrequencyAnalyzer analyzer;
}
Test_2.java:
package Example;
public class Test2 {
WordCloud cloud;
FrequencyAnalyzer analyzer;
}
最疯狂的事情。显然 1.11 版的 Maven repository 没有与之关联的 JAR,因此无法直接添加。相反,4 个子模块中的每一个都必须直接添加它们的依赖项,然后突然间它就可以工作了。我不确定 为什么 是这种情况,因为整个包将它们作为依赖项包含在内。不过,在与我的动物讨论后,我已经解决了自己的问题。
您是否应该更新 maven 以下载依赖项并将 WordCloud class 导入您的 java 文件?这个错误可能是由于 IDE 找不到 class.
根据 kumo github repository 的建议,您应该使用以下依赖项而不是 <artifactId>kumo</artifactId>
<dependency>
<groupId>com.kennycason</groupId>
<artifactId>kumo-core</artifactId>
<version>1.11</version>
</dependency>
让我们向您解释为什么 <artifactId>kumo</artifactId>
不起作用。这个 pom 使用 <project><dependencyManagement>
来公布依赖信息。 Maven 将从 <project><dependencies>
部分而不是 <project><dependencyManagement>
导入依赖项。
您可以在 ${user}\.m2\repository\com\kennycason\
(windows).
kumo
的 pom
而Maven的dependencyManagement主要用于以下项目,
- 当您拥有一组继承共同父项的项目时,可以将有关依赖项的所有信息放在共同 POM 中,并在子 POM 中更简单地引用工件。
- 控制传递依赖项中使用的工件版本。这意味着如果您在
<dependencyManagement>
部分中定义了工件的版本,那么您可以在<dependencies>
部分中声明它而无需版本。
您也可以参考Introduction to the Dependency Mechanism获取更多示例以进一步学习。