1. 程式人生 > >springboot打包成war 或jar配置

springboot打包成war 或jar配置

在用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>

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 依賴,以防萬一加上吧,誰知道會出現什麼事情呢。

3:打war包的時候,有時候會提示說沒web.xml檔案,加上下面的話明確告訴 沒web.xml

<plugin>

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

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>

這樣不管是可執行的jar , 還是war 都ok了