简体   繁体   English

无法将我的 Spring 启动应用程序打包为可运行的胖 Jar

[英]Unable to package my Spring boot application as a runnable fat Jar

I am a bit new to Spring boot and below is my application's POM/Java file:我对 Spring boot 有点陌生,下面是我的应用程序的 POM/Java 文件:

<?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.aj.stuff.install</groupId>
    <artifactId>MyProject</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>

    <name>Some-Name</name>
    <description>Some Stuff</description>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

The main java application code snippet is as below -主要的 Java 应用程序代码片段如下 -

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) throws IOException, InterruptedException {
        SpringApplication.run(MyApplication.class, args);
...

Now when i try to run the command mvn package i get below error -现在,当我尝试运行命令 mvn package 时,出现以下错误 -

[INFO] --- spring-boot-maven-plugin:1.4.1.RELEASE:repackage (default) @ MY-Bootstrap ---
[WARNING] The POM for org.springframework.boot:spring-boot-loader-tools:jar:1.4.1.RELEASE is invalid, transitive dependencies (if any) will not be available,
able debug logging for more details
[WARNING] Error injecting: org.springframework.boot.maven.RepackageMojo
java.lang.NoClassDefFoundError: org/springframework/boot/loader/tools/LaunchScript
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
        at java.lang.Class.getDeclaredConstructors(Class.java:2020)
        at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:245)
        at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:99)
        at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:658)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:882)
        at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
        at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
        at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
        at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:1006)
        at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1038)
        at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1001)
        at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
        at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
        at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:53)
        at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:65)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115)
        at org.eclipse.sisu.bean.BeanScheduler$Activator.onProvision(BeanScheduler.java:176)
        at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
        at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
        at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:63)
        at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45)
        at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
        at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
        at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
        at org.eclipse.sisu.inject.Guice4$1.get(Guice4.java:162)
        at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
        at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
        at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:255)
        at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:517)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:121)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
        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.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.loader.tools.LaunchScript
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
        ... 55 more

I have tried excluding repackage as mentioned in many other posts, but no good.我曾尝试排除许多其他帖子中提到的重新打包,但没有好处。 Any suggestions?有什么建议吗?

OS - Win 7 64 Bit操作系统 - Win 7 64 位

Maven - Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T22:11:47+05:30) Maven - Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T22:11:47+05:30)

Also I picked a bare bone project from the spring intializr and tried mvn package and same error.我还从 spring intializr 中选择了一个裸骨项目,并尝试了mvn package和相同的错误。 Any issues related to my machine, maven or anything else?任何与我的机器、maven 或其他任何相关的问题?

Thanks谢谢

Judging from the exception you got, the download for the spring-loaded dependency got corrupted.从您得到的异常来看, spring-loaded依赖项的下载已损坏。

Find the directory in which maven downloads the dependencies (by default the .m2 directory in your user dir).找到 maven 下载依赖项的目录(默认为用户目录中的.m2目录)。 Find the spring-loaded directory and remove it.找到spring-loaded目录并删除它。 This will force maven to download the dependency again.这将强制 maven 再次下载依赖项。

Instead of manually removing the dependencies you could also use the Maven dependency plugin to purge entires.除了手动删除依赖项,您还可以使用 Maven 依赖项插件来清除整个依赖项。

mvn dependency:purge-local-repository

This should remove the dependencies from the .m2 directory and force a re-download on the next mvn package .这应该从.m2目录中删除依赖项并强制重新下载下一个mvn package (See Force re-download of release dependency using Maven ) (请参阅使用 Maven 强制重新下载发布依赖项

Looks like wrong version of spring-boot-loader-tools.jar is loaded.看起来加载了错误版本的 spring-boot-loader-tools.jar。 This link might help you to fix the issue链接可能会帮助您解决问题

the spring boo loader tools jar file is corrupted spring boo loader 工具 jar 文件已损坏

remove this folder from your local repository and run maven install to download the jar file again从本地存储库中删除此文件夹并运行 maven install 以再次下载 jar 文件

\\.m2\\repository\\org\\springframework\\boot\\spring-boot-loader-tools \\.m2\\repository\\org\\springframework\\boot\\spring-boot-loader-tools

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM