我是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给我“无法解析符号”错误。更令人讨厌的是,在我尝试编译项目一段时间或之后,会自动删除导入语句。 (这是“自动删除未使用的导入”功能在这里咬我吗?)
例如,可以在第一个项目中找到以下import语句,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文件?
UPDATE :以下内容可让我访问位于“〜/ .m2”目录中的所需JAR:
File ->
Project Structure ->
Dependencies (tab) ->
"+" sign in right hand border ->
Library
然后我在库列表中看到JAR文件,通过添加它,我不再得到未解决的符号错误。 这是使用IntelliJ / Maven使用外部JAR文件的正确方法吗?
答案 0 :(得分:2)
这是使用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的情况下找到依赖项。
答案 1 :(得分:1)
文件->项目结构->依赖关系->选择依赖项并将其从“运行时”更改为“编译”