【问题标题】:unable to use custom jar in spring boot project无法在 Spring Boot 项目中使用自定义 jar
【发布时间】:2019-09-14 15:12:12
【问题描述】:

我正在尝试将 Spring Boot 应用程序的一项服务用于另一个 Spring Boot 服务。由于一些限制,我必须使用基于 jar 的方法,即,我正在使用命令 ma​​ven build 构建第一个项目,并使用为该项目创建的 jar。

我正在将该 jar 添加到其他/依赖项目的构建路径中。但是我看不到我的主要项目的服务。我也无法自动装配它们。几天前,不知何故,我能够看到服务,但依赖项目的 maven 构建失败,因为它无法在依赖项目中找到自动装配服务的源包(一个明显的失败,因为该包在主项目中)。我已经尝试了很多事情,但我不知道现在如何进行。

主项目

JartestApplication.java

@SpringBootApplication
public class JartestApplication 
{

    public static void main(String[] args) throws Exception 
    {
        SpringApplication.run(JartestApplication.class, args);
    }

}

Service.java

@FunctionalInterface
public interface DbService 
{
    public BigInteger getRowCount(String tableName) throws Exception;
}

ServiceImpl.java

@Service
public class DbServiceImpl implements DbService
{

    @Autowired
    EntityManager em;

    @Override
    public BigInteger getRowCount(String tableName) throws Exception
    {
        return (BigInteger) em.createNativeQuery("select count(*) from "+tableName).getSingleResult();
    }

}

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 https://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.8.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>jartest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>jartest</name>
    <description>Demo project for Spring Boot</description>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

依赖项目

ImportjartestApplication.java


@SpringBootApplication
public class ImportjartestApplication 
{

    public static void main(String[] args)
    {
        ApplicationContext context = SpringApplication.run(ImportjartestApplication.class, args);
        Test test = context.getBean(Test.class);
        System.err.println(test.check("test"));
    }

}

Test.java


@FunctionalInterface
public interface Test 
{
    public BigInteger check(String name);
}

TestImpl.java

@Service
public class TestImpl implements Test 
{

    //@Autowired    ---  what i want  to do
    //DbService service;    --- service is not visible even after i have added the jar of main project into the build path of this project

    @Override
    public BigInteger check(String name) 
    {
        return null;
        //return service.getRowCount(name);  -- my actual aim
    }

}

有没有其他方法可以在不共享代码的情况下共享我的服务?

由于某些限制,我无法将我的服务公开为休息服务,因此我尝试将主服务部署为 jar 并将其添加到依赖项目的构建路径中。

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    在您的spring-boot-maven-plugin 中添加以下条目。

    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <!--- begins --->
      <configuration>
        <includeSystemScope>true</includeSystemScope>
      </configuration>
      <!--- ends --->
    </plugin>
    

    【讨论】:

    【解决方案2】:
    after lots of debugging and reading the docs i found the solution and hereby i'm posting the steps to it....
    
    1. Used the below build configuration in source project
    
        <build>
            <finalName>generator</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <configuration>
                                <classifier>exec</classifier>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    2. Included the dependency into target project as system scope 
    
            <dependency>
                <groupId>generator</groupId>
                <artifactId>generator</artifactId>
                <scope>system</scope>
                <version>1.0</version>
                <systemPath>${project.basedir}\src\lib\generator.jar
                </systemPath>
            </dependency>
    
    3. Included the following build configuration in target project
    
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <!--- begins - -->
                    <configuration>
                        <includeSystemScope>true</includeSystemScope>
                    </configuration>
                    <!--- ends - -->
                </plugin>
            </plugins>
        </build>
    
    4. Used component scan at root level in target class
    
    @SpringBootApplication
    @ComponentScan("com.example.jar.service")
    public class JartestApplication 
    {
        public static void main(String[] args) throws IOException 
        {
              System.out.println("Hello world");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 2020-08-04
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2019-08-02
      • 1970-01-01
      • 2020-12-19
      相关资源
      最近更新 更多