【问题标题】:Shaded Jar in SpringbootSpring Boot 中的阴影罐
【发布时间】:2016-08-06 23:07:08
【问题描述】:

我正在尝试在 Spring Boot 应用程序中构建阴影 jar,但遇到了一些问题。我不知道我在这里做错了什么。我也阅读了以下链接,但没有运气 maven-shade-plugin error: Cannot find setter, adder nor field in org.apache.maven.plugins.shade.resource.ManifestResourceTransformer for 'resource'

这是我的 Pom.xml

<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>dashboard</groupId>
  <artifactId>dashboard</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>

    <dependency>
        <!-- Import dependency management from Spring Boot -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>1.2.7.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

  <dependency>
        <groupId>jira.widgets</groupId>
        <artifactId>jira-widgets</artifactId>
        <version>0.1.1-SNAPSHOT</version>
    </dependency> 

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


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.1.5.RELEASE</version>
    </parent>



    <!-- Additional lines to be added here... -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <!-- add Main-Class to manifest file -->
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <manifestEntries>

                                    <Main-Class>com.text.dashboard.hello.Application</Main-Class>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

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

当我运行 mvn 包时,我在控制台上出现以下异常

[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building dashboard 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ dashboard ---
[INFO] Deleting C:\Users\confiz\Documents\workspace-sts-3.7.3.RELEASE\dashboard\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ dashboard ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ dashboard ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to C:\Users\confiz\Documents\workspace-sts-3.7.3.RELEASE\dashboard\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ dashboard ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ dashboard ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.15:test (default-test) @ dashboard ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ dashboard ---
[INFO] Building jar: C:\Users\confiz\Documents\workspace-sts-3.7.3.RELEASE\dashboard\target\dashboard-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.1.5.RELEASE:repackage (default) @ dashboard ---
[INFO] 
[INFO] --- maven-shade-plugin:2.3:shade (default) @ dashboard ---
[WARNING] Map in class org.apache.maven.plugins.shade.resource.ManifestResourceTransformer declares value type as: class java.util.jar.Attributes but saw: class java.lang.String at runtime
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.609 s
[INFO] Finished at: 2016-04-15T10:55:02+05:00
[INFO] Final Memory: 22M/224M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-shade-plugin:2.3:shade (default) on project dashboard: Unable to parse configuration of mojo org.apache.maven.plugins:maven-shade-plugin:2.3:shade for parameter resource: Cannot find 'resource' in class org.apache.maven.plugins.shade.resource.ManifestResourceTransformer -> [Help 1]
[ERROR] 

场景是:我有两个 Spring Boot 项目,并且都有相同的可执行 jar 类型。我在这个项目中添加其他项目作为依赖项。这就是为什么我要构建一个包含所有依赖项的 jar

有什么建议吗?

【问题讨论】:

  • 你为什么要尝试这个? Spring Boot 已经为您创建了一个包含所有内容的 jar....您知道不同 Spring Boot 版本(1.1.5 和 1.2.7)的混合,这是您真正应该避免的!。
  • 场景是:我有两个spring boot项目,并且都有相同的可执行jar类型。我在这个项目中添加其他项目作为依赖项。这就是为什么我要构建一个具有所有依赖项的 jar
  • 那为什么首先要有两个独立的项目呢?它不会工作,因为它只会启动一个应用程序......
  • 为什么它不起作用?你能解释一下吗
  • 你有 2 个可执行的 jar,哪个要执行?您有 2 个可执行类,...您将如何合并/管理 application.properties。这两个类都有一个非常具体的 MANIFEST.MF 用于 Spring Boot,你将如何处理它,你如何合并 lib 目录并确保合并不会中断。我不明白你为什么需要这样做。

标签: java maven spring-boot maven-2 maven-plugin


【解决方案1】:

我不知道为什么,但它对我有用。只使用

<transformer    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <manifestEntries>
        <Main-Class>com.text.dashboard.hello.Application</Main-Class>
    </manifestEntries>
</transformer>

代替

 <transformers>
     <transformer    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
         <manifestEntries>
             <Main-Class>com.text.dashboard.hello.Application</Main-Class>
         </manifestEntries>
     </transformer>
</transformers>

【讨论】:

  • 从头开始:也为我工作,一直在为这个而绞尽脑汁,谢谢! “工作”是夸大其词,它只是跳过了编辑清单,所以在父 pom 中配置阴影插件似乎有些问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
相关资源
最近更新 更多