Java IntelliJ can';找不到通过新模块功能导入的包,然后自动删除导入语句?
我是IntelliJ项目的新手。以下是我的IntelliJ版本信息:Java IntelliJ can';找不到通过新模块功能导入的包,然后自动删除导入语句?,java,intellij-idea,groovy,import,Java,Intellij Idea,Groovy,Import,我是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-g
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文件中的代码从第一个项目导入第二个项目
我尝试使用“newmodule->Import from existing sources”选项,并将整个第一个项目添加到第二个项目的源结构中。但我仍然无法将第一个项目成功使用的JAR文件中的类导入到第二个项目中。当我尝试时,IntelliJ给了我“无法解析符号”错误。更令人恼火的是,经过一定的时间后,或者当我试图编译项目时,它会自动删除导入语句。(这是“自动删除未使用的导入”功能在这里咬我吗?)
例如,在第一个项目中可以找到以下导入语句,IntelliJ认为该语句有效(无警告或错误):
但是,当我在第二个项目中尝试在文件中使用相同的导入时,我得到的错误是“无法解析符号”“Messenger 4j,导入语句在某个点自动删除。注意,我尝试在其中使用import语句的文件是驻留在第二个项目中的groovy源文件,以防万一
另外,如果我查看IntelliJ在“~/.m2”目录中维护的repo存储库,我确实看到了JAR文件。在这里,您可以看到我可以成功地将“.m2”存储库树导航到Messenger 4J包:
/home/user9/.m2/repository/com/github/messenger4j$
如何在第二个项目中正确导入和使用github.com.messenger4jjar文件
更新:通过以下命令,我可以访问驻留在“~/.m2”目录中的所需JAR:
File ->
Project Structure ->
Dependencies (tab) ->
"+" sign in right hand border ->
Library
然后我在库列表中看到JAR文件,通过添加它,我不再得到未解决的符号错误这是使用IntelliJ/Maven使用外部JAR文件的正确方法吗?
这是使用IntelliJ/Maven使用外部JAR文件的正确方法吗
不,这不是马文的方式
如果两个项目都使用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>
4.0.0
com.example
项目A
1.0-快照
项目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>
4.0.0
com.example
项目B
1.0-快照
如果要在项目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>
4.0.0
com.example
项目B
1.0-快照
com.example
项目A
1.0-快照
但这不是唯一的事情。为了让项目B使用项目A,Maven需要知道在哪里可以找到它。通过在项目A的根目录中运行mvn clean install
命令,在本地Maven存储库中安装项目A,可以解决这个问题
之后,IntelliJ的Maven将能够找到依赖项,而无需手动导入项目A
这是使用IntelliJ/Maven使用外部JAR文件的正确方法吗
不,这不是马文的方式
如果两个项目都使用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>
4.0.0
com.example
项目A
1.0-快照
项目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>
4.0.0
com.example
项目B
1.0-快照
如果要在项目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>
4.0.0
com.example
项目B
1.0-快照
com.example
项目A
1.0-快照
但这不是唯一的事情。为了让项目B使用项目A,Maven需要知道在哪里可以找到它。通过在项目A的根目录中运行mvn clean install
命令,在本地Maven存储库中安装项目A,可以解决这个问题
之后,IntelliJ的Maven将能够找到依赖项,而无需手动导入项目A。文件->项目结构->依赖项->选择依赖项并将其从“运行时”更改为“编译”文件->项目结构->依赖项->选择依赖项并将其从“运行时”更改为“编译”当然,您可以随时手动导入jar,但我认为使用maven更好。当然,您可以随时手动导入jar,但我认为使用maven更好。谢谢。你会用IntelliJ这样做吗?还是有一个IntelliJ IDE功能可以做几乎相同的事情?@RobertOschler这是一种方式,是的。Maven集成在IntelliJ中是单向的。您可以使用IntelliJ添加库,但它们永远不会写入POM文件。你需要自己做,谢谢。有没有给格雷德尔的建议?项目A是Maven,而需要访问项目A中的JAR的项目B是Gradle。这是我在工作中继承的情况。我知道你也可以使用Maven本地存储库来存储Gradle。谢谢。你会用IntelliJ这样做吗?还是有一个IntelliJ IDE功能可以做几乎相同的事情?@RobertOschler这是一种方式,是的。Maven集成在IntelliJ中是单向的。您可以使用IntelliJ添加库,但它们永远不会写入POM文件。你需要自己做,谢谢。有没有给格雷德尔的建议?项目A是Maven,而需要访问项目A中的JAR的项目B是Gradle。这是我在工作中继承的情况,我知道你也可以使用Maven本地存储库来存储Gradle。