当前位置: 首页 > 知识库问答 >
问题:

Gradle bootRepackage创建的可执行Jar丢失的Jar

戈念
2023-03-14

我想做的是:

使用gradle和eclipse作为IDE创建可执行Jar。Jar应该包含运行所需的所有库,并且可以在docker容器中使用。

迄今为止的问题:

org.springframework.boot不包含在Jar中。

代码:

src/main/java/SampleController。JAVA

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

    @Controller    
    @EnableAutoConfiguration
    public class SampleController {

    @RequestMapping("/")
    @ResponseBody
        String home() {
        return "Hello World!";
    }

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

建筑格拉德尔

buildscript {
    repositories {
        jcenter()
        mavenCentral()  
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.10.RELEASE")
    }
}

apply plugin: 'java-library'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
    mavenCentral()
}

dependencies {
    // This dependency is exported to consumers, that is to say found on their compile classpath.
    api 'org.apache.commons:commons-math3:3.6.1'

    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
    implementation 'com.google.guava:guava:21.0'

    api 'org.springframework.boot:spring-boot-starter-web'
    api 'org.springframework.boot:spring-boot-starter'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

springBoot {
  mainClass = "SampleController"
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

使用的命令:

在工作区/项目/构建/库中

java-jar项目。罐子

错误:

java : Exception in thread "main" java.lang.reflect.InvocationTargetException
At line:1 char:1
+ java -jar RSSFeedAggregator.jar
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Exception in th...TargetException:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
    at SampleController.main(SampleController.java:18)
    ... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 9 more

说到这个,我是个新手。有人对如何解决我的问题有什么想法吗?

共有1个答案

满增
2023-03-14

我想我找到了解决办法。

据我所知,当直接在eclipse中运行时,gradle api/实现会在运行时自动添加JAR。但是,在使用:bootRepackage创建fat jar时,需要显式添加运行时lib。(该程序直接在eclipse上运行良好)

runtime 'org.springframework.boot:spring-boot-starter'
runtime 'org.springframework.boot:spring-boot-starter-web'

这解决了我的问题。如果有人对这个问题有什么要补充的,我不会结束这个话题。

 类似资料:
  • 当我在Eclipse中单击play时,项目运行良好,但在创建了可运行的JAR文件后,按钮的就消失了。 图像存储在src文件夹中,即子文件夹images中。 我创建了图像图标 我最终为screen recorder创建了一个非常非结构化的单片代码,现在实现他所说的有点困难。 我想知道是否有一种方法,比如创建一个类或接口,将包含所有这些资源。 那么我所要做的就是导入这些静力学,在我的主类中,

  • 11.5 创建可执行的jar文件 让我们通过创建一个能够运行在生产环境中、完全独立且可执行的jar文件来完成我们的示例。可执行jar(有时称为“fat jar”)是包含有被编译的类以及代码运行所依赖的所有jar的归档文件。 可执行的jar和Java Java没有提供任何标准的方法来加载嵌套的jar文件(即包含在一个jar文件中的jar文件)。如果您想发布一个独立的应用程序,这可能会导致问题。 为了

  • 问题内容: 我使用eclipse创建可执行jar。它依靠外部其他罐子。 在Eclipse中,只需选择即可。 您可以创建一个可执行jar。它可以在安装了jre的任何地方执行。 但是如果我使用命令行来编译jar。 它可以生成jar。但是jar只能在产生它的目录中执行。如果我将其放入另一个目录或计算机,则会抱怨。 因此,我的问题是,如何使用命令行作为Eclipse生成可执行jar。 问题答案: jar文

  • 我提取了一个包含xml、java类等的可执行jar文件。实际上,这个可执行jar文件是一个具有依赖关系的库。我需要修改这个库中一个类文件中的一行代码。我已经成功地编辑了类文件,现在我想把它重新打包到可执行的jar中。如何做到这一点。

  • 问题内容: 我创建了一个Java应用程序,并且想为此应用程序创建jar文件。此应用程序通过“构建路径”>“添加外部Jar文件”导入了其他外部jar文件。我如何在具有这些外部库依赖项的Ubuntu中为此应用程序生成可执行JAR文件? 问题答案: 要在工作台中创建一个新的可运行JAR文件: 从菜单栏的“文件”菜单中,选择“导出”。 展开Java节点,然后选择Runnable JAR文件。点击下一步。

  • 我目前正在做一个JSF项目。一切都很好。创建。war-file并部署它。 如何在NetBeans中轻松创建JAR文件?