在用spring boot 做项目开发的时候,都是直接从mavn仓库中拉取jar值不会遇到现有问题的。最近在做项目的时候由于用到了第三的jar包时候,用spring boot打包遇到的问题。

开发工具idea

1: 将项目打包成 可执行的jar文件

    按照以前整合项目的套路,直接将第三种的jar添加项目lib中即可。我也是这么做的,在项目中新建lib文件夹,将第三放的jar copy进去。

2:依然dependency标签引入第三种jar,写法如下

  <dependency><!--引入本地jar包-->
            <groupId>org.alves</groupId>
            <artifactId>weidong2-jar</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/testTwo.jar</systemPath>
        </dependency>

springboot打包成war 或jar配置

scopre 写成system , systemPath : 指向jar所在的位置。 不要按照以前的套路,在libraries中添加进来了。

3: 按照上述步骤,ide开发部署是没有问题的。但是打包mvn clean package,第三方的jar,还是未能打进去,运行项目就会提示缺少jar文件。

4:在spring-boot-maven-plugin中configuration下的includeSystemScope属性指定为true即可了。

    goal-repackage属性为true,因为项目是多模块的,不然打包后文件不能将依赖文件打包进去。

 

 <build>
        <!-- pojectName就是打包后的名称:pojectName.war -->
        <finalName>alves</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--下面是将应用打包发布需要增加的插件-->
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>

            <!--设置maven-war-plugins插件,打包的时候含入本地jar包,否则外部依赖无法打进war包-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>lib</directory><!--源文件夹-->
                            <targetPath>WEB-INF/lib/</targetPath><!--目标文件夹-->
                            <includes><!--打包文件夹中所有的jar包-->
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
            <!--################################################################################33
                        <plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <configuration>
                                <includeSystemScope>true</includeSystemScope>
                            </configuration>
                        </plugin>
                        -->
        </plugins>
    </build>

 

经过以上折腾,不管是ide开发部署,还是打包都没问题了。

 

====================分割线==========================

第二种情况,将项目打包成war包呢,能正常工作吗? 答案是:不行,是不是很桑心啊,,,哈哈哈哈哈

 

将项目打包成war包部署

1:首先修改项目的pom文件,打包类型jar=》war

  <groupId>org.alves</groupId>
    <artifactId>alves</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>alves</name>
    <description>Alves project for Spring Boot</description>

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

 

2: 按照spring boot的官方文档,说只需要添加2中的依赖(scope是provided)。 其他网友也说要在web排除tomcat的依赖,并添加上tomcat-servlet-apide 依赖,以防万一加上吧,谁知道会出现什么事情呢。

springboot打包成war 或jar配置

 

springboot打包成war 或jar配置

3:打war包的时候,有时候会提示说没web.xml文件,加上下面的话明确告诉 没web.xml

<plugin>

    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
            <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

 

springboot打包成war 或jar配置

4: 重点来了  设置maven-war-plugins插件,否则外部依赖无法打进war包

 

 <!--设置maven-war-plugins插件,打包的时候含入本地jar包,否则外部依赖无法打进war包-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>lib</directory><!--源文件夹-->
                            <targetPath>WEB-INF/lib/</targetPath><!--目标文件夹-->
                            <includes><!--打包文件夹中所有的jar包-->
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

springboot打包成war 或jar配置

这样不管是可运行的jar , 还是war 都ok了

相关文章: