【问题标题】:IntelliJ can't find package imported via New Module feature, then automatically deletes import statement?IntelliJ 找不到通过新模块功能导入的包,然后自动删除导入语句?
【发布时间】:2017-08-21 10:31:23
【问题描述】:

我是 IntelliJ 项目的新手。这是我的 IntelliJ 版本信息:

IntelliJ IDEA 2017.2.1
Build #IU-172.3544.35, built on July 31, 2017
Subscription is active until April 3, 2018
JRE: 1.8.0_152-release-915-b6 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 3.13.0-128-generic

我在 Linux Ubuntu 14.04 上运行。

我有两个完全独立的项目。我想将驻留在 JAR 文件中的代码从第一个项目导入到第二个项目中。

我尝试使用“新模块 -> 从现有源导入”选项,这确实将整个第一个项目添加到我的第二个项目的源结构中。但是我仍然无法将第一个项目成功使用的 JAR 文件中的类导入到第二个项目中。当我尝试时,IntelliJ 给了我“无法解析符号”错误。更烦人的是,经过一段时间,当我尝试编译项目时,它会自动删除导入语句。 (这是“自动删除未使用的导入”功能在这里咬我吗?)

例如,以下导入语句可以在第一个项目中找到,并且被 IntelliJ 认为是有效的(没有警告或错误):

import com.github.**messenger4j**.MessengerPlatform;

但是当我尝试在我的第二个项目中的文件中使用相同的导入时,我收到“messenger4j 的“无法解析符号”错误,并且导入语句在某些时候被自动删除. 请注意,我尝试在其中使用 import 语句的文件是位于第二个项目中的 groovy 源文件,以防万一。

另外,如果我查看 IntelliJ 在“~/.m2”目录中维护的 repo 存储库,我确实看到了 JAR 文件。在这里你可以看到我可以成功地将“.m2”存储库树导航到 messenger4j 包:

/home/user9/.m2/repository/com/github/messenger4j$

如何在我的第二个项目中正确导入和使用 github.com.messenger4j jar 文件?

更新:以下内容似乎让我可以访问位于“~/.m2”目录中的所需 JAR:

File -> 
Project Structure -> 
Dependencies (tab) -> 
"+" sign in right hand border ->
Library

然后我在库列表中看到 JAR 文件,通过添加它,我不再收到未解决的符号错误。 这是使用 IntelliJ/Maven 使用外部 JAR 文件的正确方法吗?

【问题讨论】:

  • 当然你可以手动导入jar,但我认为使用maven更好。

标签: java intellij-idea groovy import


【解决方案1】:

这是使用 IntelliJ/Maven 使用外部 JAR 文件的正确方法吗?

不,这不是 Maven 方式。

如果两个项目都使用 Maven,那么它们都有一个 POM 文件来定义一些东西。假设您有以下设置:

项目 A

<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>projectA</artifactId>
  <version>1.0-SNAPSHOT</version>

</project>

项目 B

<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>projectB</artifactId>
  <version>1.0-SNAPSHOT</version>

</project>

如果要在项目B中使用项目A中的类,需要添加项目A作为项目B的依赖。将项目B的POM文件改为:

<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>projectB</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>projectA</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

</project>

但这不是唯一的事情。为了让项目 B 使用项目 A,Maven 需要知道它在哪里可以找到它。这可以通过在项目 A 的根目录下运行 mvn clean install 命令在本地 Maven 存储库中安装项目 A 来解决。

之后,IntelliJ 的 Maven 将能够找到依赖项,而无需您手动导入项目 A。

【讨论】:

  • 谢谢。这就是您使用 IntelliJ 的方式吗?或者是否有一个 IntelliJ IDE 功能可以做大致相同的事情?
  • @RobertOschler 就是这样,是的。 Maven 集成在 IntelliJ 中是单向的。您可以使用 IntelliJ 添加库,但它们永远不会写入 POM 文件。你需要自己做。
  • 谢谢。 Gradle的任何提示?项目 A 是 Maven,项目 B,即需要访问项目 A 中找到的 JAR 的项目,位于 Gradle 中。这是我在工作中继承的情况。
  • 我知道你也可以将 Maven 本地存储库用于 Gradle。
【解决方案2】:

文件 -> 项目结构 -> 依赖项 -> 选择您的依赖项并将其从“运行时”更改为“编译”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2020-07-18
    • 2018-02-03
    相关资源
    最近更新 更多