如何配置在Eclipse STS中运行的Spring Boot应用程序

时间:2019-01-23 13:25:12

标签: spring maven spring-boot sap sap-connector-java

我有一个用STS开发的Spring Boot应用程序,该应用程序通过SAP Java连接器连接到SAP。该连接器位于jar中,其规则禁止重命名或重新打包存档。

由于该应用程序必须在多个平台上运行,因此我将SAP JCO jars在本地重新打包为一组自定义的依赖关系,其形状如下:

connectors-project
|   pom.xml
|       
+---sap-jco-api
|       pom.xml
|       sapjco3.jar
|
+---sap-jco-linux-x86_64
|   |   pom.xml
|   |       
|   \---src
|       \---main
|           \---resources
|                   libsapjco3.so
|                   Readme.txt
|                   sapjco3.jar
|                   sapjcomanifest.mf
|               
\---sap-jco-nt-amd64
    |   pom.xml
    |       
    \---src
        \---main
            \---resources
                    Readme.txt
                    sapjco3.dll
                    sapjco3.jar
                    sapjco3.pdb
                    sapjcomanifest.mf

sap-jco-api模块用于编译,其他模块用于执行。适当的打包将根据每个项目进行处理,每次都配置maven-dependency-plugin插件。

对于有问题的Spring Boot应用程序,这是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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <packaging>...</packaging>
    <version>...</version>

    <name>...</name>
    <description>...</description>

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

  <properties />

    <build>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <Class-Path>sap-jco/sapjco3.jar</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>...</mainClass>
                    <excludeGroupIds>com.sap</excludeGroupIds>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                  <execution>
                    <id>unpack-dependencies-package</id>
                    <phase>package</phase>
                    <goals>
                      <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <excludeTransitive>true</excludeTransitive>
                        <includeGroupIds>com.sap</includeGroupIds>
                        <excludeArtifactIds>sap-jco-api</excludeArtifactIds>
                        <excludes>META-INF/**</excludes>
                      <outputDirectory>${project.build.directory}/sap-jco</outputDirectory>
                    </configuration>
                  </execution>
                </executions>
            </plugin>

        </plugins>

    </build>

    <dependencies>

        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>...</artifactId>
        </dependency>

        <!-- SAP JCO connector -->
        <dependency>
            <groupId>com.sap</groupId>
            <artifactId>sap-jco-api</artifactId>
            <version>3.0.18</version> 
            <scope>provided</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>com.sap</groupId>
            <artifactId>sap-jco-nt-amd64</artifactId>
            <version>3.0.18</version>
            <scope>provided</scope>
        </dependency>

        <!--  other -->
        <dependency>...</dependency>

    </dependencies>

</project>

打包时间,所有SAP依赖项都从spring-boot-maven-plugin生成的jar中排除,并且平台特定的文件被复制到{{ 1}} MANIFEST项。

这是Maven为该POM创建的目标文件夹:

Class-Path

使用application-project | \---target | application.jar | \---sap-jco Readme.txt sapjco3.dll sapjco3.jar sapjco3.pdb sapjcomanifest.mf 运行时,生成的jar可以按预期工作。

问题出现在STS(或Eclipse)中,当我右键单击运行 java -jar target\application.jar运行方式为->的Spring Boot应用程序时,该项目似乎已打包以默认方式-从而打包了SAP jar-并且执行中断为:

->

我想我必须以某种方式在IDE中复制Maven配置,但是我找不到实现此目的的方法。在“运行配置”中,似乎没有办法执行此操作,该菜单命令也似乎没有运行Spring Boot Maven插件JCo initialization failed with java.lang.ExceptionInInitializerError: Illegal JCo archive [...]. It is not allowed to rename or repackage the original archive "sapjco3.jar". 目标,而我可以在POM中进行配置。

这阻碍了我从IDE内部调试应用程序,并且我还被迫从命令行手动打包并运行它,从而减慢了开发速度。

我该怎么办?

0 个答案:

没有答案