美文网首页码农的世界程序员技术知识分享程序员
Eclipse下maven使用的常见问题及scope详解

Eclipse下maven使用的常见问题及scope详解

作者: 什么都不会的程序员 | 来源:发表于2019-04-16 20:25 被阅读4次

    Eclipse下maven使用的常见问题及scope详解

    前言

    在Eclipse下使用Maven,着实有些不足之处,以至于经常有人问到Maven相关的问题,故此在这里做个总结,以便大家查阅。有的涉及原理的东西,也一一讲解,这样能举一反三。

    怎么创建Maven项目

    eclipse支持maven项目的创建,如果你希望不要等待那么久,直接跳过架构选择即可,但是你需要清晰地知道Maven的项目结构,他应该是这个样子:  Eclipse中的Maven项目对

    文件夹的结构解析是自动的,对应的关系如上图。 如果你创建的项目的结构不是如此,可以手动添加对应文件夹,Eclipse可以自动识别。注意所有文件夹的创建都应该在src下。当然,SpringBoot的web内容是直接仿到resouces下面的,那是SpringBoot内置的对静态资源的处理。

    如何设置JDK版本

    很多人发现创建完的Eclipse的Maven项目,在Project Facts中看到的Java的版本居然是1.5这个上古时代的版本,实际上我们只需要在Maven中添加这么一段代码就可以了:

    <build>

        <plugins>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>

    </plugins>

    </build>

    项目菜单中的Update Project是什么原理

    Eclipse实际上对Maven的支持并不算完备,其中一个特点就是Eclipse仍按照自己的方式来管理Maven项目,当我们修改了POM配置后,Maven并不能自动读取理解。而且Eclipse会尝试通过POM配置自动匹配一些Eclipse内置配置,比如尝试为web项目自动添加webService的支持等。 修改pom后,单击项目右键选择Maven->Update Project的功能就是读取POM配置并使用Eclipse的方式来更新项目的配置。比如,上面的修改Java版本的代码改动后,你就应该执行这个操作:  简单说来,所有pom文件的更新,如果没有及时反馈到Eclipse的项目属性中,你都可以执行这个菜单,快捷键为alt+ F5。

    从哪里搜索依赖,如何选择版本

    原来的maven.aliyun.com是可以搜索包的,但是现在只能作为库使用了。搜索库,最佳去处,自然是https://mvnrepository.com/,搜索后直接复制pom就可以了。

    关于版本选择问题,一方面要考虑版本之间的冲突,这是第一原则。其次,如果有多个版本可选(比如日志框架),那么选择下载次数最多的基本不会错,如下图:

    什么时候需要设置scope

    scope是对dependency的管理措施,scope的可用值有下面几个:

    1、 compile 这是默认的scope,表示在运行,打包,测试几个声明周期中,对应的jar包都是存在可用的,最典型的是如果你设置了某个dependency的scope不为compile,则你会发现打包后war文件中没有对应的jar包。

    system 这个scope可以用来引用maven库无法下载的包,比如你公司自己的jar包,如果没有maven私服,这是一个快捷的解决办法,典型的例子是谷歌的验证码插件:

    <dependency>

    <groupId>com.google.code</groupId>

    <artifactId>kaptcha</artifactId>

    <version>2.3.2</version>

    </dependency>

    大家可以尝试后发现提示无法直接下载,解决的办法是https://mvnrepository.com/中搜索到对应版本后找到jar包下载,然后放到项目的某个文件夹中,用下面的代码实现引用:

    <dependency>

    <groupId>com.google.code</groupId>

    <artifactId>kaptcha</artifactId>

    <version>2.3.2</version>

    <scope>system</scope>

    <systemPath>${project.basedir}/libs/kaptcha-2.3.2.jar</systemPath>

    </dependency>

    3、provided provided表示将来的运行环境会提供该jar包,它在编辑代码时段,maven打包阶段都可用,但不会打包到结果中,比如tomcat自带的包,比如servlet-api,可以这样写:

    <dependency>

    <groupId>javax</groupId>

    <artifactId>javaee-api</artifactId>

    <version>7.0</version>

    <scope>provided</scope>

    </dependency>

    这样就不用使用eclipse的方式也就是添加对tomcat运行时的build path了。

    4.

    test表示引用的jar包仅在测试类中有效,比如下面的两张图说明了这个问题:Eclipse认识不同的作用域。

    当然test scope的jar包也不会被打包到结果包中,比如war中。

    5、runtime 这个作用域用来表示该jar包仅在运行时可用,及在编译打包期间不需要,与compiler相比,仅跳过编译步骤。

    Maven的源设置及本地仓库设置

    本地仓库,默认存放缓存位置是在C盘,C盘是多么重要的地盘,maven依赖不小哇,动不动就是几个G,所以还是将其转移吧,代码参考下面的讲述。 使用aliyun的maven源仍然是最快的,设置的办法有两种,一个是修改eclipse的maven设置中的settings.xml:

    <?xml version="1.0" encoding="UTF-8"?><settingsxmlns="http://maven.apache.org/SETTINGS/1.0.0"

              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

      <localRepository>D:\mavenrepo</localRepository>

      <mirrors>  

         <mirror>  

          <id>alimaven</id>  

          <mirrorOf>central</mirrorOf>  

          <name>aliyun maven</name>  

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

        </mirror>  

      </mirrors>  </settings>

    一个是在pom中添加源设置(pom的根节点下):

    <repositories>

    <repository>

    <id>public</id>

    <name>aliyun nexus</name>

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

    <releases>

    <enabled>true</enabled>

    </releases>

    </repository>

    </repositories>

    需要和原创作者沟通交流技术,或者说有问题需要帮助解答的话,可以留言回复,大家也可以关注我下  以后给大家带来更多的精彩内容

    相关文章

      网友评论

        本文标题:Eclipse下maven使用的常见问题及scope详解

        本文链接:https://www.haomeiwen.com/subject/jvmiwqtx.html