当前位置:首页 » 编程软件 » maven命令编译

maven命令编译

发布时间: 2023-07-08 14:33:13

Ⅰ mvn dependency:tree 命令需要先编译

需要。
电脑的指令都是需要先编辑好,要不然就没办法执行,在项目开发过程中,我们经常会有分析项目依赖的需要,查找jar依赖路径,查找jar冲突等等。这时候,dependency命令会非常的有用。
Maven常用命令有:mvn-version:查看maven的版本及配置信息。mvncompile:编译项目代码。mvnpackage:打包项目。mvntest:运行单元测试。mvnclean:清除编译产生的target文件夹内容。mvninstall:将项目生成jar包放在仓库中。

Ⅱ maven工程编译并生成可执行JAR包命令

你需要什么的命令???
一般的是 call 你的maven的地址/mvn clean install
当然 也有其他的情况 比如节点的不同 需要改变命令 不知道 你要的节点是什么。。。

Ⅲ 怎么编译运行从github上下载下来的maven项目源码(我想调试运行的是sonarqube的源码)跪求大神orz

maven 编译命令
从别处拷贝来的maven项目,有时候会出现不能debug关联的情况,即按住ctrl键后不能跳转到相应的类或方法,这是需要eclipse环境生成 Eclipse 项目文件的。

可以在cmd命令窗口下进入到maven项目包含pom.xml文件的目录下,运行 mvn eclipse:eclipse 命令即可,如果还不行,可使用mvn compile :编译源代码 命令。

--------------------------------------------------------------------------------------------------------------------------------
下面是一些maven的常用命令:

Maven2 的运行命令为 : mvn ,
常用命令为 :
mvn archetype:create :创建 Maven 项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar 文件
mvn install :在本地 Repository 中安装 jar
mvn eclipse:eclipse :生成 Eclipse 项目文件
生成项目
建一个 java 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=App
建一个 web 项目 : mvn archetype:create -DgroupId=com.demo -DartifactId=web-app -DarchetypeArtifactId=maven-archetype-webapp

生成 Eclipse 项目
普通 Eclipse 项目执行 : mvn eclipse:eclipse
Eclipse WTP 项目执行 : mvn eclipse:eclipse –Dwtpversion=1.0

更详细的,自己网络搜索 maven 编译,学习一下吧

Ⅳ idea编译和maven编译的区别

个人的一个小感受,学习一个新技术,应该以历史的眼光开看待这个新技术出现的原因,以及帮我们解决了什么问题。在个人职业生涯中要感谢Java自学网,一直自学java,我们来回忆一下没有Maven的日子是怎么样的?

开发一个项目,需要用别人写好的jar包,我们先把开源的jar包下载下来放到项目的lib目录下,并把这个目录添加到CLASSPATH(告诉Java执行环境,在哪些目录下可以找到你要执行的Java程序需要的类或者包)
我们下载了a.jar发现a.jar还需要依赖b.jar,结果又去把b.jar包下载下来开始运行
如果运气够好,我们的项目在添加完所有的依赖后,能正产运行了。如果运气差点,还会遇到版本的问题,例如a.jar在调用b.jar的时候发现b.jar根本没有这个方法,在别的版本中才有,现在好了,光找依赖和适配版本就能花上不少时间
而且我们往git上上传代码的时候,还必须把这些lib都上传上去。别人下载我们的代码时也必须把lib下载下来,这个真心耗费时间
这时候Maven作为Java世界的包管理工具出现了,当然Java世界还有其他包管理工具,例如gradle等。就像yum是linux世界的包管理工具,webpack是前端世界的包管理工具一样

Maven仓库的种类

.png
Maven找jar包的过程是这样的,先在本地仓库找,找不到再去私服(如果配置了的话),再找不到去中央仓库(http://repo1.maven.org/maven2/,maven团队负责维护)

从中央仓库找到后,会在私服和本地仓库放一份,从私服找到后也会在本地仓库放一份

当你安装在好了Maven以后,在conf目录下有个settings.xml文件,这个里面配置的项很多,后文会详细介绍这个配置文件。

在这个配置文件下有这样一段话,说了Maven默认的本地仓库地址为${user.home}/.m2/repository(当然你可以重新设置本地仓库的地址,上面就是模板),我是window电脑,来看看这个目录

.png
看到有很多jar包被存到本地,当然如果你想配置私服也是在settings.xml上进行配置,随便一搜很多教程,不再赘述

搭建私服好处多多,在一个公司内部可以开发一些公共的基础组件放到私服上,方便其他同事使用

Maven的默认配置

一个Maven的项目的整体结构是这样的

.png
在这里插入图片描述

为什么一个Maven项目的文件结构是这种的呢?

这就不得不说到Maven的一个特性,约定优于配置。

Maven默认配置了${project.basedir}/src/main/java为项目的源代码目录

${project.basedir}/src/main/test为项目的测试代码目录

${project.basedir}/target为项目的编译输出目录等

spring boot就是约定优于配置的体现,想想我们用spring mvc的时候还得配置视图解析器,包的自动扫描,而用了spring boot框架,我们就完全不用再配置了

Maven项目详解

安装还是挺简单的,我就不再介绍,我也没有单独下载,一般就用了Idea自带的Maven了,下载完后目录结构如下:

.png
bin目录:

该目录包含了mvn运行的脚本,这些脚本用来配置java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。

boot目录:

该目录只包含一个文件,该文件为plexus-classworlds-2.5.2.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更加丰富的语法以方便配置,Maven使用该框架加载自己的类库。

conf目录:

该目录包含了一个非常重要的文件settings.xml。直接修改该文件,就能在机器上全局地定制maven的行为,即对所有用户都生效。一般情况下,我们更偏向于复制该文件至~/.m2/目录下(~表示用户家目录,windows下~就是C:UsersPeng,Peng是小编的用户名),然后修改该文件,在用户级别定制Maven的行为。

lib目录:

该目录包含了所有Maven运行时需要的Java类库,Maven本身是分模块开发的,因此用户能看到诸如maven-core-3.0.jar、maven-model-3.0.jar之类的文件,此外这里还包含一些Maven用到的第三方依赖如commons-cli-1.2.jar、commons-lang-2.6.jar等等。、

settings.xml配置文件详解

我们来详细说一下settings.xml这个文件,这个文件可以定制Maven的行为,上面已经说到settings.xml可以放在2个位置,~/.m2/setting.xml(默认没有,需要我们自己复制)和${maven.home}/conf/setting.xml

这2个配置文件的加载顺序为~/.m2/setting.xml>${maven.home}/conf/setting.xml,为了不影响他人,所以我们将conf下的settings.xml复制到家目录,在用户级别定制Maven的行为。

.png
这个和配置环境变量有点类似,Windos和Linux都可以配置系统级别的环境变量和用户级别的环境变量,这里单说一下Linux的吧,在/etc/profile里面配置的就是系统级别的环境变量,在~/.bash_profile里面配置的就是用户级别的环境变量

各种配置项还是挺多的,设置镜像仓库(国内用阿里云的比较多),设置代理,不再赘述

maven常用命令

.png
当然也可以连着使用

mvn clean package 清理打包

mvn clean package -DskipTests=true 清理打包,并跳过测试用例

mvn clean install 清理打包,并将jar包或者war包复制到本地仓库

运行单测的时候也没必要一个一个点测试方法,mvn test 一个命令跑完所有测试用例,

要注意的是只会执行以Test开头或者结尾的测试类,也没必要自己写测试类,我在推荐阅读第一篇文章中演示了快速生成测试类的方法,可以去看看,生成的测试类都是以Test结尾的

mvn dependency:tree > show.txt 将依赖输出重定向到文件中,方便查看

pom.xml详解

groupId 公司域名倒过来

artifactId 功能命名

version 版本号

这三个维度确定一个jar包,就像用(x,y,z)坐标在三维空间中唯一确定一个点。

packaging 打包方式,jar,war,maven-plugin(开发maven插件)

scope详解

参数解释是否会被打入最终的jar包compile默认的scope是test测试使用否provided编译需要否runtime编译不需要,运行时需要(接口与实现分离)是system加载本地jar否

类似如下这种,没有指定scope,说明scope是compile

org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2
test是指在运行测试用例的时候才会用到,没必要打入到最后的jar里面,所以你看到的测试框架的scope基本上都是test

org.springframework.boot spring-boot-starter-test test
provided,编译的时候会用到,但不会被打入最后的jar包

例如想把spring boot项目以war包的形式放在tomcat中运行,首先得加入如下依赖

org.springframework.boot spring-boot-starter-tomcat provided
或者你写了一个放在Storm集群或者Flink集群上运行的任务,最后都要把Storm的依赖或者Flink的依赖设置成provided,因为集群上已经都有这些环境的jar包、

如果你用到lombok插件的话,你会发现lombok的Maven是如下形式,说明它只会编译的时候会用到。

org.projectlombok lombok 1.16.6provided
我写了如下一个测试类

@Datapublic class Test { private String name; private int age;}
生成的class文件反编译后的如下,验证了我们的想法,编译之后确实没有必要再用lombok这个jar包

public class Test { private String name; private int age; public Test() { } public String getName() { return this.name; } public int getAge() { return this.age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; }}
runtime,运行时才会用到。例如,如果你的项目有对数据库的操作,但没有加入相应的JDBC的实现jar包,如mysql-connector-java,是可以编译成功的,只有运行时才会报错。所以你看到的JDBC实现的jar包scope为runtime,表明这个jar包在运行时才会用到

mysql mysql-connector-java 5.1.35runtime
system,本地加载jar,当你和第三方公司合作,他们只是给了你一个jar包时,你可以有三种选择

mvn install到本地仓库
mvn deploy到私服
指定jar包路径,从本地加载,例如如下pom形式
com.tievd.third arcvideo 1.0system${basedir}/lib/face-api-1.0.jar
前文已经说到scope为system的依赖不会被打入最终的jar包,得通过配置插件等方式将依赖打入最终的jar包,所以这种方式一般很少使用。

还没写完,后续更精彩

写在最后:

码字不易看到最后了,那就点个关注呗,只收藏不点关注的都是在耍流氓!

关注并私信我“架构”,免费送一些Java架构资料(也可到Java自学网直接获取),先到先得!记得转发哦!

打开CSDN,阅读体验更佳
最新发布 【分享】idea版本与maven版本不一致的坑
在确保maven 相关的配置没有问题的时候,可以考虑下,是否是idea与maven版本配置问题。比如 idea 2022,使用maven3.6.x 有点小问题,推荐版本3.8.x。idea 2021 使用高版本3.8.x 有点小问题,推荐版本3.6.x。
继续访问
记Maven命令打包到本地库*.pom文件打包不完整的解决思路
问题描述 1、需求描述 目前筹划做一个开源的springboot项目,其想法是在这个开源项目中整合所有依赖的jar包。之后开发就直接新建个maven项目直接依赖这个包就可以直接进行开发了。 2、问题描述 当写好基础的jar包打包之后,mvn install 到本地仓库,新建maven项目依赖此jar包,发现基础jar包所依赖的所有jar都没有引入进来。但是经过几番测试发现一下规律: (1)、在idea中install 的jar包可以正常使用。 (2)、mvn install:instal..
继续访问
idea正常 jar包运行有问题_IDEA 直接点击运行执行正常,命令行下面执行Jar包出现部分乱码的情况。...
解决方案如上:有个Springboot项目为了测试方便,模型类用中文作为字段属性,封装成Odata格式,在通过Springboot发布并打成jar包。通过命令行启动jar包里面的Springweb服务,访问的时候开始进入服务http://desktop-6vf91n9:8080/exp.svc/ 中文字段就乱码,通过application.properties编码,进入服务不乱码了。http://...
继续访问
2.maven打包方式的不同
maven安装命令: (1)打包snapshot和正式版本号是不一样的,发布到私服中的命令也不一样,不需要snapshot方式时,各个依赖包下都需要去除 (2)打包过程中可能会遇到的编码错误,可能需要设置打包时的项目编码 (3)spring.maven.plugin和maven.plugin的打包方式,后者会要求需要填入主类信息 (4)mvn -DskipTests -Drat.skip=...
继续访问
Maven依赖关系原则
转载自: Maven依赖关系原则与冲突解决办法(含必杀技) 笔者JustryDeng Maven依赖关系原则(概念): 相关概念: 级别: 我们不妨把pom.xml里面的引用的依赖视为第一级,那么依赖中各自引用的依赖视为第二级...第三级... 路径长短: 我们不妨以从pom.xml出发,到抵达该依赖时经过的“级”的个数来作为路径长短的标准。 最短路径(不同级引用)原则: 若两个版
继续访问
IDEA面板Build Project和maven compile、package、install、deploy的区别
前言: 基于springboot项目 IDEA面板Build下面的Project build和Maven compile、package、install、deploy比较 1、Build Project(Ctrl+F9) 编译项目,生成字节码文件; 生成的target中有classes、generated-sources、generated-test-sources、test-classes目录; 第一次点Build Project会编译整个项目包括测试类,第二次点Build Proje
继续访问
idea中jar包明明存在,却报jar包不存在异常的完整处理过程
java开发中遇到的各种问题处理方案
继续访问

idea web项目中out(maven中是target)目录更新不同步,导致访问404
今天碰到个很恶心的东西。。就是明明导入了相应的依赖文件(css,html,js等文件),路径也正确。。就是访问不了。。。。弄了一个多小时。。。 原因在哪?看了一下web项目的生成位置,发现编译之后会重新生成一个out目录,更新不同步。。。。 解决方法:build->Build Artifact->clean,然后再build->build Artifact->rebuild。。。问题解决。。 如果使用的是maven构建的web项目,就简单很多直接cmd定位到项目根节点,有pom
继续访问

热门推荐 笔记本win10相机打不开 无法启动 显示灰色相机 怎么办
问题笔记本相机打开只显示一个灰色相机图,不显示画面如图:解决方案一笔记本会有一个相机的快捷键F8,直接按下F8或者Fn+F8即可解决问题。如图:解决方案二打开win10设置→隐私→相机,查看允许访问相机的权限有没有打开如图:解决方案三下载相应品牌型号的设置Settings软件,比如我的是联想,下载安装Lenovo Settings,开启相机如图:解决方案四Win+R打开命令端,输入regedit运...
继续访问
IDEA build报错,显示程序包不存在而maven compile无问题
1 问题描述 抽风症状一:打开项目之后外部引用的包都飘红,必须点击maven的reimport才可以洗白 抽风症状二:点击IDEA上方的锤子build失败,显示各种程序包不存在,而托管maven compile无问题 IDEA版本:2020.1 2 尝试 terminal中键入mvn idea:idea 无效 在搜罗了网上的各种解决方案之后,可以确定的是出现这个状况的IDEA版本都是2020.1 3 问题定位 原因:IDEA的Build(编译)操作和Maven的Build是分开的,并不是一回事。 我之前
继续访问

maven依赖的jar包版本不一样_系统优化(一)Maven打包同一个jar有不同的:版本+时间戳(解决思路)...
解决:maven仓库的ear里面有很多个相同的jar(只是包含不同的:版本+时间戳)问题描述: 发现ear里面有很多个相同的jar,只是包含不同的:版本+时间戳,如下图所示:(例如:itoo-basic-api有很多相同的jar,只是包含不同的:版本+时间戳)解决思路用权限的itoo-authority-usergroup-ear模块进行测试1.怀疑是:maven的坐标,时间戳的问题关键字:mav...
继续访问
maven本地打包环境不一致
maven本地打包安装提示No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 这是mvn的jre环境和jdk下的jre环境不一致,修改环境变量配置和idea的maven使用的jre环境后还是不生效,直接修改maven安装目录下的bin文件夹中的mvn.cmd文件,在第一行加上以下代码解决问题。 set JAVA_HOME=C:\Program Files\Java\
继续访问
IDEA 编译 .jar (可能涉及问题)
IDEA 在执行以下操作前需要确认: 包内class文件没有语法错误,项目SDK和SDK版本号保持一致,main method 和 main path 的设定 以上确认存在问题将导致编译不通过,解决方法如下: 打开方式为:File----->Project Structure----->Project 对项目进行编译首先在File----->Project Structure----->Project目录下点开Artifacts 这边需要添加项目,可选择从当前编辑页寻找 按
继续访问

IntelliJ打包与Maven命令打包的区别
因为经常会遇到这个问题,两种打包方式打出来的包不一样,一般情况是IntelliJ包可能会报错,而使用Maven命令行打出来的包就可以正常使用。具体的区别还没去找,暂时写在这儿,后面再补充 ...
继续访问
使用maven给jar包生成对应的pom文件
参考: https://blog.csdn.net/qq_31289187/article/details/81117478 1. 背景 公司不允许使用外网进行安卓开发,所以在内网里无法连接google和jcenter的库,也无法使用阿里云的国内镜像。所以只能使用本地文件,进行项目的构建,但是在项目构建的过程中,会报如下错误。 Could not find androidx.databinding:databinding-compiler:4.0.1. Search in the follo.
继续访问
maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法
项目中,经常会遇到ClassNotFound,NoSuchMethod异常,第一反应往往是类路径不对,jar没有正确的引用。第一步判断jar是否加载,还是 加载的jar由于maven依赖管理存在传递依赖,造成依赖的jar版本号不对,相应的类找不到,或者是相应类版本不对,没有对应的方法。一 造成jar 冲突的原因:如果项目中存在对同一jar不同版本依赖的时候,maven 2根据最近原则,默认引用最靠...
继续访问
intelliJ导出的jar包运行效果和ide运行效果不一致
写在开头,文章还是要自己写,不管是有多烂。 如果连一篇本该是作为职业生涯技术点滴记录的博客都造假,那人生未免太可悲。 好一些的作者,转载文章后,挂上转载标签,再附上自己的感想。只要感想是自己的,感想写得内容多了,挂个原创也不为过。写清楚哪些是自己的,哪些是别人的,就行了。 但现在呢,在当下,好多人都想做网红,都想要聚合流量,然后自媒体流量变现。然后,就是一堆乱七八糟往上点,就为了你能关注下他发的...
继续访问
maven打包pom文件在windows和linux下的格式差异
org.apache.maven.plugins maven-compiler-plugin 3.1 ${java.version} ${java.version} UTF-8 true --> ${java.home}/lib/rt.jar${delimiter}${java.home}/lib/jce.jar ${delimiter} 这个分隔符,在Wi
继续访问
maven在eclipse编译和在CMD编译结果不一致
maven配置文件默认使用的是setting.xml文件 在CMD环境下也是默认使用setting文件 而在eclipse环境下编译则使用的是eclipse配置的setting文件, 因此,会出现在eclipse编译和在CMD编译结果不一致的问题 转载于:https://www.cnblogs.com/fanrenren/p/11346276.html...
继续访问
maven工程pom.xml配置引用的jar包和最终打出war包中的jar包版本号不一致——mvn命令的应用
今天在打包一个maven工程时,发现有个jar包(暂且叫它A.jar),在pom.xml中配置的明明是2.3的版本,打出的war包里的A.jar怎么都是1.0的版本,导致war包部署不起来。为此挣扎了1个多小时,pom依赖检查和环境检查。最后终于想到可以利用maven的mvn命令打印出jar包依赖关系才发现原来是工程里引用的另一个jar(叫它B.jar好了)也依赖了A.jar,而B.jar中A,j
继续访问

Ⅳ 使用maven编译JAVA程序是出错

问题描述:
在eclipse中build一个普通maven项目,报错,提示信息是缺少maven插件(插件名称忘了)。

原因:
可能是由于使用了eclipse自带的jre导致的,这个jre里没有tools.jar,而jdk的lib目录下有(个人理解)。

解决办法:
1、检查eclipse的配置,确保使用的不是eclipse自带的版本。
步骤:在eclipse中打开Window->Preferences->Java->Installed JREs->Add,添加自己下载并配置好的jdk(别忘了配置环境变量),我用的是jdk1.6.0_4.3。


2、然后再次编译maven项目,仍然报错,但提示信息改变了,提示的是C:\Users\Administrator.EED4VRFALFPIIBP\.m2\repository\commons-logging\commons-logging下的jar包解析失败;
3、解决方案:删除repository文件夹,确保网络畅通,重启eclipse,执行Maven->Project
Update,问题解决。

注意:如果你的eclipse中配置了tomcat,那么你也需要重新选择tomcat的jdk版本,确保与前面的一致。

步骤:在eclipse中打开Window->Preferences->Server->Runtime
Environment->选中你的tomcat server->Edit,在JRE这项里选择你的jdk,完成。

Ⅵ 用maven编译项目时出现如下问题

在/etc/profile配置java的环境变量: 你的mvn 项目是用哪个版本的jdk.,就要配置那个版本的jdk。

强制保存文件命令:w !sudo tee %

此时在进入项目执行:$ git pull origin master

继续mvn clean install

Ⅶ 如何用maven将java8写的代码编译为java6平台的

在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code),以类文件的形式保存在磁盘上(.class)。Java虚拟机(JVM)会负责把Java字节代码加载并执行。Java通过这种方式来实现其“编写一次,到处运行(Write once, run anywhere)” 的目标。Java类文件中包含的字节代码可以被不同平台上的JVM所使用。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类。在某些情况下,可能会需要动态的生成 Java字节代码,或是对已有的Java字节代码进行修改。这个时候就需要用到本文中将要介绍的相关技术。首先介绍一下如何动态编译Java源文件。
动态编译Java源文件
在一般情况下,开发人员都是在程序运行之前就编写完成了全部的Java源代码并且成功编译。对有些应用来说,Java源代码的内容在运行时刻才能确定。这个时候就需要动态编译源代码来生成Java字节代码,再由JVM来加载执行。典型的场景是很多算法竞赛的在线评测系统(如PKU JudgeOnline),允许用户上传Java代码,由系统在后台编译、运行并进行判定。在动态编译Java源文件时,使用的做法是直接在程序中调用Java编译器。
JSR 199引入了Java编译器API。如果使用JDK 6的话,可以通过此API来动态编译Java代码。比如下面的代码用来动态编译最简单的Hello World类。该Java类的代码是保存在一个字符串中的。
01 public class CompilerTest {
02 public static void main(String[] args) throws Exception {
03 String source = "public class Main { public static void main(String[] args) {System.out.println(\"Hello World!\");} }";
04 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
05 StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
06 StringSourceJavaObject sourceObject = newCompilerTest.StringSourceJavaObject("Main", source);
07 Iterable< extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
08 CompilationTask task = compiler.getTask(null, fileManager, null,null, null, fileObjects);
09 boolean result = task.call();
10 if (result) {
11 System.out.println("编译成功。");
12 }
13 }
14
15 static class StringSourceJavaObject extends SimpleJavaFileObject {
16
17 private String content = null;
18 public StringSourceJavaObject(String name, String content) ??throwsURISyntaxException {
19 super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension), Kind.SOURCE);
20 this.content = content;
21 }
22
23 public CharSequence getCharContent(boolean ignoreEncodingErrors) ??throws IOException {
24 return content;
25 }
26 }
27 }
如果不能使用JDK 6提供的Java编译器API的话,可以使用JDK中的工具类com.sun.tools.javac.Main,不过该工具类只能编译存放在磁盘上的文件,类似于直接使用javac命令。
另外一个可用的工具是Eclipse JDT Core提供的编译器。这是Eclipse Java开发环境使用的增量式Java编译器,支持运行和调试有错误的代码。该编译器也可以单独使用。Play框架在内部使用了JDT的编译器来动态编译Java源代码。在开发模式下,Play框架会定期扫描项目中的Java源代码文件,一旦发现有修改,会自动编译 Java源代码。因此在修改代码之后,刷新页面就可以看到变化。使用这些动态编译的方式的时候,需要确保JDK中的tools.jar在应用的 CLASSPATH中。
下面介绍一个例子,是关于如何在Java里面做四则运算,比如求出来(3+4)*7-10的值。一般的做法是分析输入的运算表达式,自己来模拟计算过程。考虑到括号的存在和运算符的优先级等问题,这样的计算过程会比较复杂,而且容易出错。另外一种做法是可以用JSR 223引入的脚本语言支持,直接把输入的表达式当做JavaScript或是JavaFX脚本来执行,得到结果。下面的代码使用的做法是动态生成Java源代码并编译,接着加载Java类来执行并获取结果。这种做法完全使用Java来实现。
01 private static double calculate(String expr) throws CalculationException {
02 String className = "CalculatorMain";
03 String methodName = "calculate";
04 String source = "public class " + className
05 + " { public static double " + methodName + "() { return " + expr +"; } }";
06 //省略动态编译Java源代码的相关代码,参见上一节
07 boolean result = task.call();
08 if (result) {
09 ClassLoader loader = Calculator.class.getClassLoader();
10 try {
11 Class<?> clazz = loader.loadClass(className);
12 Method method = clazz.getMethod(methodName, new Class<?>[] {});
13 Object value = method.invoke(null, new Object[] {});
14 return (Double) value;
15 } catch (Exception e) {
16 throw new CalculationException("内部错误。");
17 }
18 } else {
19 throw new CalculationException("错误的表达式。");
20 }
21 }
上面的代码给出了使用动态生成的Java字节代码的基本模式,即通过类加载器来加载字节代码,创建Java类的对象的实例,再通过Java反射API来调用对象中的方法。
Java字节代码增强
Java 字节代码增强指的是在Java字节代码生成之后,对其进行修改,增强其功能。这种做法相当于对应用程序的二进制文件进行修改。在很多Java框架中都可以见到这种实现方式。Java字节代码增强通常与Java源文件中的注解(annotation)一块使用。注解在Java源代码中声明了需要增强的行为及相关的元数据,由框架在运行时刻完成对字节代码的增强。Java字节代码增强应用的场景比较多,一般都集中在减少冗余代码和对开发人员屏蔽底层的实现细节上。用过JavaBeans的人可能对其中那些必须添加的getter/setter方法感到很繁琐,并且难以维护。而通过字节代码增强,开发人员只需要声明Bean中的属性即可,getter/setter方法可以通过修改字节代码来自动添加。用过JPA的人,在调试程序的时候,会发现实体类中被添加了一些额外的 域和方法。这些域和方法是在运行时刻由JPA的实现动态添加的。字节代码增强在面向方面编程(AOP)的一些实现中也有使用。

Ⅷ windows maven命令行 命令怎么使用

下载maven,下载后如果是压缩包,进行解压,得到maven目录。

找到我们的maven目录并复制路径,右键计算机,属性里选择高级系统设置,找到环境变量。

用户变量下选择新建,变量名为M2_HOME,变量值为D:\Program Files\apache-maven-3.1.0,点击确定

找到maven下的bin目录D:\Program Files\apache-maven-3.1.0\bin复制,用户变量下选中PATH点击编辑,粘贴,注意加分号跟其它的隔开。

这就算配置完成,验证对不对,win+R快捷键cmd进入dos窗口,输入命令,mvn -v(注意中间有个空格),回车运行后可以看见maven版本maven home表示安装成功。

进入或者新建想要生成项目的文件夹,通过运行dos命令mvn archetype:generate,可以简单搭建一个maven项目的骨架。运行过程中会让我们输入groupId,artifactId,package,也可以直接设置这些,例如:mvn archetype:generate -DgroupId=com.xh.maven -DartifactId=maven_03 -Dversion=0.0.1_SNAPSHOT

如果我们写好了一个项目,dos命令下可以通过mvn compile编译项目src/main/java下中的类

如果编译的结果显示有ERROR,怎么查看ERROR的详细信息呢,可以通过mvn -e,从本例这个提示看,就是pom.xml上第一行xml后面编码encoding拼写错误

mvn项目是src下有个main,还有个test测试,mvn -test就是编译src/test/java中的类

mvn package 打包
mvn install 会把打的jar包发到仓库中,这样另一个项目中pom.xml下通过dependency下配置就可调用里面的类

Ⅸ 如何用Java代码执行maven编译

我的思路:在windows环境下,用Java调用CMD进入待操作的项目目录下,然后执行mvn compile。或者执行bat批处理文件,用bat执行maven命令。

热点内容
androidondraw调用 发布:2025-02-07 12:09:22 浏览:187
linuxkill进程 发布:2025-02-07 12:09:17 浏览:196
c语言sqrt函数怎么用 发布:2025-02-07 12:07:48 浏览:894
安卓手机怎么不用手机id登录 发布:2025-02-07 12:06:28 浏览:38
ceph缓存变慢 发布:2025-02-07 11:46:52 浏览:923
python做什么用的 发布:2025-02-07 11:46:46 浏览:563
o2o与数据库设计 发布:2025-02-07 11:35:27 浏览:929
ftp服务器推荐 发布:2025-02-07 11:35:16 浏览:700
吉利星瑞豪华加6000是有哪些配置 发布:2025-02-07 11:25:18 浏览:971
李字加工编程 发布:2025-02-07 11:23:50 浏览:881