spring 无法从jar导入类

swvgeqrz  于 12个月前  发布在  Spring
关注(0)|答案(4)|浏览(107)

我在将类从类库导入到我的项目时遇到问题。请查看屏幕截图。
我在Eclipse和IntelliJ中尝试了几种方法,既可以直接添加,也可以通过Maven添加。
在IntelliJ中,我尝试:
1.项目结构-模块-附件-添加jar。
1.尝试创建一个lib文件夹,将其添加为库,并将jar放入其中,然后设置为依赖项。
1.通过maven pom.xml添加到jar的直接路径。
在Eclipse中,我尝试:

  1. Java构建路径并将其添加到我的构建路径中。
    1.更新项目。
    下面是我的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里面的类(截图)。但是仍然不能导入它们。如果有什么我可以提供的,请让我知道。
x1c 0d1x的数据

ax6ht2ek

ax6ht2ek1#

在项目文件夹的根目录下创建一个lib/ dir。把你的Jar放在那里。把它添加到你的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
您也可以尝试在本地存储库中手动安装依赖项:
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


希望这有帮助

emeijp43

emeijp432#

co.uk.包中的类文件在模拟器jar中打包的BOOT-INF/classes中,无法直接访问,因为它不是jar默认类路径(“.”)的一部分。

要更好地了解jar类路径,请查看What's the default classpath when not specifying classpath?

模拟器jar需要打包classpath入口,在classpath中添加BOOT-INF/classes/...,以允许访问BOOT-INF/classes下的类。

例如,要允许使用maven访问包uk.co. prosperous_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>

字符串

6ljaweal

6ljaweal3#

如果你使用SpringBoot和InteliJ Idea,当你有excute mvn clean package命令时,你应该在maven pom中使用packaging.jar.original。

/META-INF
    /MANIFEST.MF
/uk
    /co
        /pervasive_intelligence
            /simulator
                /BaseComponent.class
                /SimulatorApplication.class
                /SimulatorException.class
....

字符串

thtygnil

thtygnil4#

我也遇到过类似的问题,在分析其他工作库的内部jar结构时,我注意到我试图导入的自定义库的结构不正确,@Martin萨拉戈萨在his answer中指出:
jar文件没有标准java库的结构,为了使用jar作为库,类的包应该作为文件夹存在于jar文件的基目录(或根目录)中。
为了解决这个问题,我已经将导入的自定义库的build pom部分替换为以下内容:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

字符串

相关问题