在将类从JAR库导入到我的项目时遇到问题。请查看屏幕截图。
我已经在Eclipse和IntelliJ中尝试了几件事,直接添加和通过Maven添加。这些都无济于事,下划线仍然是红色。
我在IntelliJ中尝试过:
在Eclipse中,我尝试过:
这是我的pom.xml,用于获取本地jar。
<dependency>
<groupId>uk.co.pervasive_intelligence.simulator</groupId>
<artifactId>protocol</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\Users\Vas-DELL\Desktop\simulator-1.2.2.jar</systemPath>
</dependency>
奇怪的是,我能够看到jar和jar中的类(截图)。但是仍然无法导入它们。让我知道是否还有其他可以提供的东西。
答案 0 :(得分:2)
在项目文件夹的根目录中创建一个lib /目录。把你的罐子放在那里。将此添加到您的pom.xml:
<dependency>
<groupId>uk.co.pervasive_intelligence.simulator</groupId>
<artifactId>protocol</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/lib/simulator-1.2.2.jar</systemPath>
</dependency>
请勿使用\作为路径分隔符(即使您使用的是Windows)
从命令行运行mvn clean package
您还可以尝试在本地存储库中手动安装Dependecy:
mvn install:install-file -Dfile=simulator-1.2.2.jar -DgroupId=uk.co.pervasive_intelligence.simulator -DartifactId=protocol -Dversion=1.0 -Dpackaging=jar
然后将其添加到您的pom:
<dependency>
<groupId>uk.co.pervasive_intelligence.simulator</groupId>
<artifactId>protocol</artifactId>
<version>1.0</version>
</dependency>
编辑:
jar文件没有标准Java库的结构。为了将该jar用作库,您的类的程序包应作为文件夹存在于jar文件的基础(或根目录)中。例如:
/META-INF
/MANIFEST.MF
/uk
/co
/pervasive_intelligence
/simulator
/BaseComponent.class
/SimulatorApplication.class
/SimulatorException.class
....
作为一个库jar文件,MANIFEST.MF的内容可以很简单
Manifest-Version: 1.0
希望这会有所帮助
答案 1 :(得分:1)
Class文件位于 simulator jar中的 BOOT-INF / classes 内,无法访问直接因为它不是jar的默认类路径(“。”)的一部分。
要更好地了解jar类路径,请检查What's the default classpath when not specifying classpath?
模拟器 jar需要与类路径条目打包在一起,以在类路径中添加BOOT-INF / classes / ...以允许访问BOOT-INF / classes下的类。
例如,允许使用maven从包 uk.co.pervasive_intelligence.simulator.Component 中访问类,可以按以下方式完成
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Class-Path>BOOT-NF/classes/uk/co/pervasive_intelligence/simulator/Component</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
答案 2 :(得分:0)
如果使用SpringBoot和InteliJ Idea,则执行mvn clean package命令时,应使用maven pom中的packagename.jar.original,因为jar文件具有标准Java库的结构。
/META-INF
/MANIFEST.MF
/uk
/co
/pervasive_intelligence
/simulator
/BaseComponent.class
/SimulatorApplication.class
/SimulatorException.class
....