【问题标题】:How to use a Java class from an application in another application?如何在另一个应用程序中使用来自应用程序的 Java 类?
【发布时间】:2019-12-29 12:03:43
【问题描述】:

我在一个应用中有一个类(它是一个Spring Boot项目),例如:

package com.exemple.spring.springboot.model;

public class Employee {
   ...
}

在 pom.xml 我有这个:

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.exemple.spring</groupId>
    <artifactId>spring-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    ...

现在我想在另一个应用程序中使用这个类 Employee:

package com.exe.spring.controller;

import org.springframework.stereotype.Controller;
import com.exemple.spring.springboot.model.Employee;


@Controller
public class EmployeeController {

    public Employee getAnEmployee() {
       ...
    }
}

我已经为第一个应用程序使用mvn clean install 构建了 JAR,并将它添加到第二个应用程序的 pom.xml 中,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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.exe.spring</groupId>
    <artifactId>rest-client</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>rest-client</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.exemple.spring</groupId>
            <artifactId>spring-boot</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

问题是我无法在 EmployeeController 类中导入 Employee 类。我已经像 import com.exemple.spring.springboot.model.Employee; 一样手动导入了它,但 Intellij 显示错误:无法解析符号“springboot”。我看到依赖项出现在本地存储库中。这很奇怪,因为 Eclipse 没有看到要为 Employee 导入的任何内容,而 Intellij 看到了该类,但是当我尝试单击“导入类”时,它没有导入任何内容。我该怎么做才能正确导入它?谢谢!

【问题讨论】:

    标签: java maven spring-boot dependencies


    【解决方案1】:

    您不能直接将其添加为依赖项,它必须存在于 certral/本地/远程存储库之一中。

    您需要将 jar 添加到 repo,例如本地存储库,

    mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
    

    然后将存储库添加为,

    <repository>
        <id>repo</id>
        <url>file://${project.basedir}/repo</url>
    </repository>
    

    查看其他选项here

    【讨论】:

    • 感谢您的回复,但是我已经为第一个应用程序做了 mvn clean install,并且我看到它呈现在本地存储库中,然后我只是在 pom.xml 中添加了依赖项。第二个应用程序的 xml。还不够吗?
    • 够了。
    【解决方案2】:

    勾选关注:

    • 您已使用 mvn clean install 构建并安装了第一个 JAR。
    • 您的 JAR 在第二个应用程序的类路径中。你可以看到所有 他们在idea中的“外部库”中。如果没有,请重新导入 maven 项目或使用自动导入选项

    您也可以使用不同的 maven 项目结构,例如:

    Common parent
     |
     |-------> first jar 
     |
     |-------> second jar (with first one as a dependency)
    

    我认为它应该更适合你。

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2019-11-13
      • 2012-05-19
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多