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了