我正在参加「掘金·启航计划」
在使用Maven
的Package
打包时、在pom.xml
中一般都是配置这
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
有配置
无配置
可以看出没有那段配置打包出来的要文件小很多、但是这个是使用java -jar like-web-1.0-SNAPSHOT.jar
是启动不起来的、就是因为jar中没有携带其他引用的依赖导致项目启动不起来。
下面是为60M的文件包内容、里面是会包含其他引用的依赖如、Spring的Mysql的等等一些引入的依赖的jar都会在里面、这种包含在里面的就可以直接启动
如何做到项目jar
和lib
分开呢?修改为下方pom.xml
配置。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<layout>ZIP</layout>
<includes>
<include>
<!-- 排除所有Jar -->
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
修改完成后再次进行打包会在target
下的lib
文件夹中就是所依赖的jar
文件、而项目文件也就明显的减少的很多
注意:在使用启动命令时需要加上指定lib的文件位置、原来的是
java -jar like-web-1.0-SNAPSHOT.jar
现在改成java -jar -Dloader.path="./lib/" like-web-1.0-SNAPSHOT.jar
还有一点需要注意、就是注意lib
文件里面的jar
就是我们在本地这样跑是没有问题的、但是放在访问上跑就要注意lib的jar文件
就比如我项目中这个项目中依赖的一个同级的子项目、我把子项目的代码改了之后在编译然后把项目jar
放到服务器运行、后续会出现我们新编译的同级的子项目的jar
没有在我们服务器指定的lib文件夹中更新掉
、就会出现代码异常的情况。
或者在使用Dockerfile来构建的时候也要指定、注意的是这个是指定的是容器里面的路径、我是启动的时候我这边是docker run
的时候指定的挂载路径。
COPY ./like-other*.jar /item/like-other.jar
CMD ["--spring.profiles.active=pro"]
EXPOSE 8089
ENTRYPOINT ["java","-jar","-Dloader.path=/item/lib/","/item/like-other.jar"]
每日一汤