idea 怎么引入在pom.xml的jar

idea 怎么引入在pom.xml的jar,第1张

maven3在解决依赖冲突采用就近原则,在就近原则不能做出判断的情况下依据pomxml的声明的先后顺序决定导入的jar。
jar包冲突多为传递性依赖的管理不当给项目带来的麻烦解决思路罗列如下:
1、首先查看当前项目的jar关系如果使用eclipse、idea等编辑器可打开pomxml文档底部有Dependency Hierarchy可供查看jar的依赖情况。第二种使用maven插件的方式使用命令行:
mvn dependency:tree
结果中重要的是两个部分,首先是Used undeclared dependencies意值项目中使用到的,但是没有显示声明的依赖。这种依赖意味着潜在的风险。他是通过其他直接依赖导入的传递性依赖,当直接依赖升级时相关依赖的版本也会变化。可能导致当前项目报错,且不易察觉。另一个部分是Unused declared dependencies意指项目中未使用的,但显式声明的依赖。需要注意的是我们不应该直接删除了事而是应该仔细分析。因为这个命令行发现不了执行测试和运行时需要的依赖。
以上方法都可可完整的查看当前项目的jar情况,个人更喜欢使用命令行。
2、通过以上方法我们可以看到项目中引用jar版本号;接下来就是如何排除掉我们不想要版本的jar;语法如下:
<dependency>
<groupId></grooupId>
<artifactId></artifactId>
<version></version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclesions>
<dependency>
<!--exclusions可包含一个或多个exclusion元素-->
3、一下规避jar冲突的思路,如果项目中有直接用到某个jar而这个jar已通过传递依赖的方式引入到maven项目里了。最好排除这个传递依赖在pom里面明确的声明这个依赖。归类依赖,不断的优化依赖如,去除多余的依赖。

一 Idea打包jar
因为本人用的开发环境是IntelliJ IDEA,开始的时候研究了一下利用这个开发工具进行打包
首先按F4或者点击IDEA右上角这地方
进入项目结构管理器
选择这里面的Artifacts。开始我完全不知道Artifacts是什么东西,后来查阅了点资料:Artifacts是maven中的一个概念,表示某个module要如何打包,例如war exploded、war、jar、ear等等这种打包形式;意思我理解的就是Artifacts就是告诉我们的程序因该如何打包这个项目。
之后新建一个Artifacts
这有两个选项选择第二个,从模块中引入,点击进去后会有一些设置,如下:
module是你需要打成jar包的项目
MainClass是运行的主函数,如果不需要运行则可以不选择
jarfilesfromlibraries是项目打包的方式,下面选项大致的含义:
1:extracttothetargetjar:把所有文件倒入进一个jar包里
2:copytothe。。。。:把项目的依赖包导出和项目一个目录,通过MANIFESTMF文件来引用jar包。
这里如果你的项目需要打成一个可运行的jar包推荐第二种,反之第一种。
设置完之后,就会新建一个xxx:jar,并进入进入xxx:jar的编辑页面
在我们需要进行一个输出目录布局的设置,我们可以看到,已经编译好的项目的jar文件(我的是eachendjar)和其他导入的jar包混到一起的,很杂,我是点击outputlayout下最左边的文件夹图标新建了一个lib文件,把其他jar包拖拽进来(建议,也可以直接点OK完成)
但是我们这样做的话依赖的jar包的目录就会产生变化,这时候我们需要选中我们项目,在下方然后修改MANIFESTMF中的Class Path
修改成OK
到了这一步后Artifacts是写好了,保存之后就可以用来生成jar文件
点击build Artifacts后选择你刚刚生成的artifacts
build后就会在out的目录下生成对应的jar文件
最后进入项目目录输入命令java -jar XXXjar就可以跑起来了如下
二gradle打包jar
本以为项目打成jar包并且可以完美运行了后,这事就差不多完了,可是项目组长说:你这样打包是可以,但是如果其他人用Eclipes来开发的话,就不管用了。。。。。。哎,好不容易搞出来的一个方法被pass掉了,无奈之下就只有另换方法。
因为项目我是用的gradle构建的,第一时间想起了用gradle打包。
利用gradle进行打包其实非常非常简单,但是因为我平常只是简单用它来导包,以及构建项目,它的基本的一些东西不是很清楚,所以走了些弯路花了大半天的时间才搞出来,所以说有时候需要了解一下你所用的东西的一些基础和原理。
在build,gradle中首先需要加上
apply plugin: 'java'
apply plugin: 'idea'
来定义你自己项目使用的插件,apply plugin: 'idea'用于把项目构建成idea项目,apply plugin: 'java'用于添加Java插件,以及一些内置任务,打包jar就要用到这里的插件。
version = '10'
repositories {
mavenCentral()
}
这里用来声明版本号以及添加maven中心仓库地址
dependencies {
compile 。。。。。。。
}
这里来添加项目所需要的依赖包
jar {
String someString = ''
configurationsruntimeeach {someString = someString + " lib//"+itname} //遍历项目的所有依赖的jar包赋值给变量someString
manifest {
attributes 'Main-Class': 'comeachdubboMainEnd'
attributes 'Class-Path': someString
}
}
打包的时候,这个地方很重要,用来设置jar文件的相关属性,这个地方把我坑了有点久,最后补了下gradle的基础知识,就搞出来了,这篇博客写gradle基础写的还可以,推荐给大家看看>第一步:将IKAnalyzerjar包存放在一个文件夹中,比如mylib文件夹
第二步:建立一个IKAnalyzerjar包相关的pomxml文件,需要在pomxml文件中定义其maven坐标及其相应的依赖代码即可,同样将pom文件存放在上述jar文件同一文件夹下;
第三步:打开CMD,进入到mylib文件夹,运行下面的命令:
mvn install:install-file \
-Dfile=IKAnalyzer328jar \
-DgroupId=orgwlteaik-analyzer \
-DartifactId=ik-analyzer \
-Dversion=328 \
-Dpackaging=jar

 对于Maven项目来说,日常使用的多数第三方java库文件都可以从Maven的Central Repository中自动下载,但是如果我们需要的jar文件不在Central Repository中,那么我们就需要手动将自己下载的jar文件加入到Maven的local reposotory中了,此时我们需要向Maven提供用于识别jar文件(可能多个)的groupId, artifactId和version等信息。
我并不打算讲怎么将一个下载的jar库加入到local repository中,我们将自己建立一个jar库,比如我们有一个最简单的HelloWorld类HelloWorldjava:
package comthoughtworksdavenkin;
public class HelloWorld
{
public void sayHello()
{
Systemoutprintln("Hello, World");
}
}
我们希望将HelloWorldjava打包成jar文件安装在Maven的local repository中以便其它程序使用。
编译打包hello-worldjar后,为了符合Maven的规定,需要给hello-worldjar一个版本号,故将hello-worldjar改名为hello-world-10jar,此后便可以用mvn来安装此包到Maven的local repository中了:
mvn install:install-file -Dfile=path/to/hello-world-10jar -DgroupId=comthoughtworksdavenkin -DartifactId=hello-world -Dversion=10 -Dpackaging=jar
其中,-Dfile选项应给出需要安装jar文件的路径,在Linux/Mac下,jar文件将被安装在以下目录:
~/m2/repository/com/thoughtworks/davenkin/hello-world/10/hello-world-10jar
现在,我们的hello-world-10jar便可以被其它Maven项目所使用了,为此创建一个Maven工程:
mvn archetype:generate-DgroupId=comthoughtworksdavenkindemo -DartifactId=helloworld-demo -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=10
此时将在当前目录下自动创建helloworld-demo子目录,切换到helloworld-demo目录,删除已有的Appjava,并创建自己的Mainjava文件
rm src/main/java/com/thoughtworks/davenkin/demo/Appjava
touch src/main/java/com/thoughtworks/davenkin/demo/Mainjava
将以下内容加入到Mainjava文件中:
package comthoughtworksdavenkindemo;
import comthoughtworksdavenkinHelloWorld;
public class Main
{
public static void main(String[] args)
{
new HelloWorld()sayHello();
}
}
接下来是最重要的一步,修改pomxml文件以加入对HelloWorld类的依赖:
<project xmlns=">1 Idea启动和服务器jar包启动是两个不同的概念。
Idea是一个IDE,它可以让开发者方便地编写、调试和运行Java程序。
而服务器jar包启动指的是将一个Java程序打包成可执行的jar文件,并在服务器上运行它。
2 Idea启动一个Java程序的方式有很多种,可以直接运行主类,也可以使用Maven或Gradle插件。
服务器jar包启动通常使用命令行,执行java -jar命令启动程序。
3 值得注意的是,Idea并不是服务器,不能像服务器一样一直运行在后台。
而使用服务器jar包启动的程序可以在后台持续运行,具有更好的可靠性和稳定性。
4 总之,如果开发者需要进行程序的开发和调试,可以使用Idea进行启动;如果需要在生产环境中部署程序,就需要将程序打包成可执行的jar文件,并在服务器上启动。

目标 1 将依赖第三方jar包都打进去
2 将工程java 目录下所有文件夹和配置文件,包括资源文件都打入jar包,根据目录来
3 打出jar文件可直接运行
方法:采用 maven-assembly-plugin
环境:IDEA 1415 JDK 18
其中/写法,是为了保证各级子目录下的资源文件被打包,svn相关文件排除。
pomxml 写法
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>/</include>
</includes>
<excludes>
<exclude>/svn/</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources></span>
<plugins>
<plugin>
<groupId>orgapachemavenplugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>232</version>
<configuration>
<source>18</source>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13205721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-20
下一篇 2023-06-20

发表评论

登录后才能评论

评论列表(0条)

保存