草庐IT

maven配置步骤及问题

再美不及姑娘你 2023-03-28 原文

一、Maven->conf->settings.xml文件配置

E:\szsgg\video\4maven\apache-maven-3.5.4\conf\setting配置

1. 配置本地仓库

 

   <localRepository>E:\szsgg\video\4maven\repo</localRepository>

2. 配置下载网站地址

 

  <mirrors>

   <mirror>

    <id>nexus-aliyun</id>

    <mirrorOf>central</mirrorOf>

    <name>Nexus aliyun</name>

    <url>http://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>

  </mirrors>

3. 配置JDK环境

 

  <profiles>

   <profile>

  <id>jdk-1.8</id>

  <activation>

<activeByDefault>true</activeByDefault>

<jdk>1.8</jdk>

  </activation>

  <properties>

  <maven.compiler.source>1.8</maven.compiler.source>

  <maven.compiler.target>1.8</maven.compiler.target>

  <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>

  </properties>

</profile>

  </profiles>

 

二、idea创建maven工程

  1. 创建空工程

File->new->project->Empty project

 

  1. 空工程中创建maven模块

New->module->创建,需要特别注意标红地方,父工程选none,工程路径确保在工程下而不是模块下

 

三、Maven工程中易出现的问题?

1. 在一个模块调用另一个模块进行test报错?

有可能是配置文件没有进行导入依赖,先查看是否导入

可能是模块的jar包没有放到仓库中,需要将模块jar包放置本地仓库

步骤: 找到此工程->选择install命令放置到仓库再次运行即可

 

 

2. 依赖范围可见性问题

compile(默认就是这个范围)

1main目录下的Java代码可以访问这个范围依赖

2test目录下的Java代码可以访问这个范围依赖

3)部署Tomcat服务器上运行时放在WEB-INFlib目录下

例如对Hello的依赖。主程序、测试程序服务器运行时都需要用到

2test

1main目录下的Java代码不能访问这个范围依赖

2test目录下的Java代码可以访问这个范围依赖

3)部署Tomcat服务器上运行时不会放在WEB-INFlib目录下

例如:对junit依赖。仅仅是测试程序部分需要。

3provided

1main目录下的Java代码可以访问这个范围依赖

2test目录下的Java代码可以访问这个范围依赖

3)部署Tomcat服务器上运行时不会放在WEB-INFlib目录下

 

3. 依赖的间接传递性

存在间接依赖的情况时,主工程间接依赖jar可以访问吗?要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问例如

Maven工程

依赖范围

A可见性

A

B

C

compile

D

test

×

E

provided

×

 

 

4. 如何解决依赖间的冲突问题?

1.路径最短者优先,当本工程依赖或间接依赖两个不同的版本时,采用离本工程最近的工程

 

   2.路径相同时先声明者优先

 

这里声明先后顺序指的是dependency标签配置的先后顺序也就是本工程依赖写在xml文件中最前面的jar

 

 

 

5. 如何将依赖中不需要的jar包去掉?也叫依赖的排除

 

  pro.xml中找到所导入的依赖,添加以下代码,切记需要添加到dependency标签下

<exclusions>

    <exclusion>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </exclusion>
</exclusions>

 

 

 

 

6. 自定义标签(解决依赖过多时修改版本号一事)

Springjar包依赖为例:Spring的每一个版本中都包含spring-contextspringmvcjar包。我们应该导入版本一致的Spring jar而不是使用4.0.0spring-context的同时使用4.1.1springmvc

但是如果我们一个一个修改,就会很麻烦。所以我们可以自定义一个标签进行统一管理依赖的版本号,类似于java中的变量赋值,当需要修改时就可以统一修改,此标签需要写在pro.xml的最上面

<!--统一管理当前模块的jar包的版本-->

<properties>

    <spring.version>4.0.0.RELEASE</spring.version>

</properties>

 

 

7. 生命周期

什么是Maven的生命周期?

Maven生命周期定义了各个构建环节的执行顺序,有这个清单,Maven就可以自动化的执行构建命令了。

Maven有三套相互独立的生命周期,分别是:

  • Clean Lifecycle在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。
  • Site Lifecycle生成项目报告,站点,发布站点。

再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行mvn clean install site运行所有这三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean,这个cleanClean生命周期的一个阶段。有Clean生命周期,也有clean阶段。

生命周期与自动化构建

运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行mvn install 的时候,代码会被编译,测试,打包。这就是Maven为什么能够自动执行构建过程的各个环节原因。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

四、继承

使用继承机制就可以将这样的依赖信息统一提取到工程模块中进行统一管理。

 

1.创建父工程

1)父工程的打包方式为pom

<groupId>com.atguigu.maven</groupId>

<artifactId>Parent</artifactId>

<packaging>pom</packaging>

<version>1.0-SNAPSHOT</version>

(2)父工程只需要保留pom.xml文件即可。

2.子工程中引用父工程

1)父工程坐标

<parent>

<!-- 父工程坐标 -->

<groupId>...</groupId>

<artifactId>...</artifactId>

<version>...</version>

 

<!--指定从当前pom.xml文件出发寻找父工程的pom.xml文件的相对路径-->

<relativePath>..</relativePath>

</parent>

2)继承

<!--继承-->

<parent>

    <groupId>com.atguigu.maven</groupId>

    <artifactId>Parent</artifactId>

    <version>1.0-SNAPSHOT</version>

 

<!--指定从当前pom.xml文件出发寻找父工程的pom.xml文件的相对路径-->

<relativePath>../Parent/pom.xml</relativePath>

</parent>

此时如果子工程的groupId和version如果和父工程重复则可以删除

 

3. 父工程中管理依赖

1)将Parent项目中的dependencies标签,用dependencyManagement标签括起来。

<!--依赖管理-->

<dependencyManagement>

    <dependencies>

        <dependency>

            <groupId>junit</groupId>

            <artifactId>junit</artifactId>

            <version>4.0</version>

            <scope>test</scope>

        </dependency>

    </dependencies>

</dependencyManagement>

2)在子项目中重新指定需要的依赖,删除范围和版本号。

<dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

</dependency>

 

五、酷站

我们可以到http://mvnrepository.com/搜索需要的jar包的依赖信息。

http://search.maven.org/

 

有关maven配置步骤及问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

随机推荐