【问题标题】:Spring boot maven plugin with a main class in a dependencySpring Boot Maven 插件,具有依赖项中的主类
【发布时间】:2016-12-08 16:55:17
【问题描述】:

我有一个可能不寻常的情况,我想使用 spring-boot maven 插件在具有 spring 服务的项目上执行“mvn spring:start”(在集成测试之前),但是具有 main 方法的类位于jar 文件。这样做的原因是,将有许多这样的 spring 服务在启动时需要一些通用结构以用于测试目的,所以这个想法是会有一个包含通用内容的通用 jar 和带有 main 的类方法和每个单独的服务项目将简单地重用它。

不幸的是,我在使用 main 方法的类中遇到了 ClassNotFoundException - spring boot 显然不是在查看 jar 文件,而只是在这个项目的编译类中。

有问题的 pom(修剪):

<?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.something</groupId>
<artifactId>something</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
    ...
    <dependency>
        <groupId>com.something</groupId>
        <artifactId>artifact-with-main-method</artifactId>
        <version>0.0.1-SNAPSHOT</version
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.4.2.RELEASE</version>
            <dependencies>
                <dependency>
                    <groupId>com.something</groupId>
                    <artifactId>artifact-with-main-method</artifactId>
                    <version>0.0.1-SNAPSHOT</version
                </dependency>
            </dependencies>
            <configuration>
               <mainClass>com.something.Application</mainClass>
                <requiresUnpack>
                    <dependency>
                        <groupId>com.something</groupId>
                        <artifactId>artifact-with-main-method</artifactId>
                    </dependency>
                </requiresUnpack>
            </configuration>
            <executions>
                <execution>
                    <id>pre-integration-test</id>
                    <goals>
                        <goal>start</goal>
                    </goals>
                </execution>
                <execution>
                    <id>post-integration-test</id>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

    </plugins>
</build>
</project>

输出:

java.lang.ClassNotFoundException: com.something.Application
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:501)
    at java.lang.Thread.run(Thread.java:745)

更新: 我放弃了试图让它发挥作用。我最终使用 mvn:exec 插件来执行我需要的 java 命令。它工作得很好。

【问题讨论】:

    标签: java spring maven spring-boot


    【解决方案1】:

    你有没有:

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

    也在依赖项中?如果是,那么它将使依赖模块无法导入到当前模块/项目。因此,将其从依赖项中删除,并将其添加到您要导入主类的当前模块中。

    【讨论】:

    • 是的 - 我对依赖项进行了更改以确保它不会受到影响。
    猜你喜欢
    • 2018-09-21
    • 2017-01-31
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2021-05-15
    • 2014-04-25
    相关资源
    最近更新 更多