打工具包jar(普通项目)
什么是工具包呢? 就是其他项目需要依赖我们的某些类或者方法,那么我们就需要将当前的项目打成工具包放入到目标项目里
然后apply->ok 之后我们就可以开始编译jar包了
在你创建jar包时候,下图这个目录下找
这种打包方式是工具包,可以放入在其他项目里使用
打运行包jar方式一(普通项目)
我们需要运行我们写的功能,并且不依赖于IDEA这些工具,而且在任意有JDK环境的电脑上进行使用
之后就在当前项目下out文件内将所有依赖文件和当前项目文件都打包在一起了
可以先进入这个文件下的命令行
然后我们运行我们项目的jar 其他jar都是这个项目的依赖jar不用管
使用命令: java -jar utils.jar
接下来就可以把生成的这个文件夹拷贝到远程linux上就行了.
以后每次打包的时候,只要没有新的依赖jar,那么只需要将Linux上当前项目的jar替换掉就行了,不然每次上传全部的话太费时间了.
注意:
这种打包方案每次更新代码不用从新配置打包配置 直接build 就行了 然后在黑窗口内直接从新启动就行了resources下面的META-INF不要删除,这个文件是记录当前项目的全部依赖 删除了会导致打包后项目找不到依赖启动失败
打运行包jar方式二(普通项目)
这种方式打包后的依赖会,都放入到主jar包内的根目录里,也就是说所有的内容都会打包进一个jar里
然后我们运行jar包
打包war(手工)
如果把include in project build 给勾选上那么每次更新代码打包都是最新的
然后apply->ok 之后我们就可以开始编译war包了
在你创建jar包时候,下图这个目录下找
使用IDEA-Maven插件打包war
使用IDEA-Maven插件打包jar
打包前需要进行clean,不然一些新加的文件等不会生效
然后他就会在target下面生成了jar或者war
普通项目打包jar
非Springboot 项目是不会自动配置主类的那么需要我们手动指定主类才能打包
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><!-- 此处指定main方法入口的class --><mainClass>com.csdn.PomDemo</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>assembly</goal></goals></execution></executions></plugin></plugins><!-- 指定jar包名称--><finalName>pom-demo</finalName></build>
Springboot打包jar
项目pom.xml内必须有 (自动查找主类)
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
使用Maven自带的打包工具(注意前提的你Maven插件(Plugins能使用 )
还需要检测你的IDEA-Maven的配置
打包后一般在项目的target下面
Springboot父子工程打包jar
介绍和注意事项
简称:多工程或者多模块打包
但是注意的是: 有主入口的模块是主模块最后会生成jar包,没有主入口的模块是依赖模块需要将包打入主模块里
什么是主入口模块?
模块的主入口文件内容最少如下:
@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
没有主入口文件的打包方式比如: pojo , dao , service , utils 这些单独抽取出来生的一个模块在pom里添加下面的代码
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version></plugin></plugins></build>
有主入口文件的 比如 web eureka feign … 这些 在pom里添加下面的代码
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
打包顺序
先将父工程打包到本地仓库里,然后在将所有依赖模块打包到本地私有仓库里
比如pojo dao service utils
这些模块里面没有主入口(Main)的工程,打包到本地仓库
然后 web , eureka , feign 这些有主入口(Main)的工程才能打包成功
注意:如果子模块或依赖模块更新,那么相关依赖的主模块也需要重新打包
具体打包流程图:
赖冲突问题
如果子工厂依赖了b,而父工程也依赖了b那么就会产生依赖冲突问题A引用了B, B引用了C, 而C引用了A 这样就会造成死循环,就会产生依赖冲突问题
具体如何解决参考我博客IDEA-Maven依赖冲突解决大全
问题
启动jar乱码问题
在windwos系统中cmd里我当时启动一个jar ,然后打印的中文都正常,最后执行的结果,和在IDEA中执行的结果不一致,也没有报错,然后我就纳闷了,代码一模一样怎么会不一样呢? ,然后我就在关键的地方输出信息到窗口中,我发现我在代码中读取外部的一个文件导致的,而文件内容都是乱码, 然后我检查cmd的编码格式才发现,默认的是gbk编码(系统默认), 而那个文件内容是utf-8格式的,所以读取的内容会乱码,导致内部程序解析不了这些内容自动跳过了,然后知道原因了就好处理了在jar启动的时候加上-Dfile.encoding=utf-8
就行了
java -Dfile.encoding=utf-8 -jar pom-demo.jar
父子模块打包问题
Failed to execute goal on project …: Could not resolve dependencies for project …
首先,相信既然你犯了这样的错误,那么你的项目应该也是多个module的,
我这里就举个例子,主模块web和功能模块service这两个模块。
在模块中web依赖于service模块,在service中执行完clean和install之后,本地仓库也存在依赖,但是在web中进行install就会出现上面的报错,
解决办法: 最后发现原来是自己没有首先对父项目也就是根模块进行clean和install , 导致web依赖根模块的东西找不到,因为父子传递的因素导致的
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^