zoukankan      html  css  js  c++  java
  • Maven配置

    常见问题:

    1,正常打包部署到私服maven-snapshots, 引用方的pom文件中通过maven-public报错:未找到

    解决:mvn clean install -Dmaven.test.skip=true -U

    2,打包到私服

    mvn deploy:deploy-file -DgroupId=com.fadada.sdk -DartifactId=fadada-sdk -Dversion=1.0 -Dpackaging=jar -Dfile=E:fadada-sdk-1.0.jar -Durl=http://120.55.59.214:8888/repository/3rd_party/ -DrepositoryId=nexus

    Maven下载Jar包同时下载源文件和文档

    mvn eclipse:eclipse -DdownloadSources -DdownloadJavadocs 

     第一个命令去取所有在POM中的的source code,第二个去取Javadocs

    mvn dependency:sources 
    mvn dependency:resolve -Dclassifier=javadoc

    批量导出Maven项目依赖的jar

    https://my.oschina.net/cloudcoder/blog/212648

    编译跳过Test

    -Dmaven.test.skip=true

    安装jar:

    $ mvn install:install-file -DgroupId=com.maven.multim -DartifactId=multim-client -Dversion=1.0-SNAPSHOT -Dpackaging=jar

      -Dfile=/e/mulJar/multim-client-1.0-SNAPSHOT.jar

    常用命令---------------------------------------------------------------------------------------------------------------------------------------------
    ~~安装~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    mvn -v
    linux-设置maven环境变量
    export M2_HOME = /?
    export PATH = $PATH:$M2_HOME/bin
    export MAVEN_OPTS=-Xms256m -Xmx512m


    ~~开发~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    mvn compile 进行编译(将编译结果放在项目target文件夹中),并下载依赖的jar (编译时会查找依赖的Jar包,如果没有找到Jar包则需要添加依赖)(找不到Jar包的时候先到本地仓库中查找,如没有到远程仓库下载)
    mvn test 进行测试
    mvn package 打包jar,war(将打的包放在项目target文件中)
    mvn clean 删除target(字节码文件,测试报告)
    mvn install 安装jar到本地仓库中
    (A项目需要引入B项目中的Class,则需在B项目根目录下mvn install将B项目Jar包安装到本地仓库中,然后在A项目中pom.xml添加B项目的依赖)
    <dependency>
    <groupId>com.ipudong.pdserver</groupId>
    <artifactId>pdserver-client</artifactId>
    <version>0.0.1SNAPSHOT</version>
    </dependency>


    ~~Archetype~~~~~~~~~~~~~~~~~~~~~~~~~
    ---自动构建Maven目录结构
    mvn archetype:generate
    mvn archetype:generate -DgroupId=com.ipudong.pdserver -DartifactId=pdserver-client -Dversion=1.0.0SNAPSHOT -Dpackage=com.ipudong.pdserver.client
    ~~坐标~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    坐标(依赖的Jar的地址:groupId,artifactId,version):构件(依赖的Jar)
    <dependency>
    <groupId>com.ipudong.pdserver</groupId>
    <artifactId>pdserver-client</artifactId>
    <version>0.0.1SNAPSHOT</version>
    </dependency>


    ~~仓库~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    中央仓库:
    需要的jar再次可查
    apache-maven-3.3.9libmaven-model-builder-3.3.9.jarorgapachemavenmodelpom.xml https://repo.maven.apache.org/maven2
    镜像仓库:
    由于中央仓库在国外,为了方便访问,可以使用国内的镜像仓库,其内容与中央仓库内容一致,需要设置Maven的setting.xml配置
    <mirror>
    <id>CN</id>
    <mirrorOf>central</mirrorOf> --表示凡是访问central仓库的,都使用以下定义的镜像仓库,也可以使用*表示所有仓库访问都转为使用此镜像仓库
    <name>OSChina Central</name>
    <url>http://maven.oschina.net/content/groups/public/</url> //此地址现在不能访问,说明问题即可
    </mirror>
    或者
    <mirror>
    <id>nexus</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus 197</name>
    <url>http://nexus.healthbok-inc.com:8080/content/groups/public/</url> //内网服务器上创建的仓库
    </mirror>
    本地仓库
    本地仓库默认使用:C:UsersWWH.m2 epository
    本地仓库地址修改:setting.xml <localRepository>E:DevFilesDev_libs</localRepository>


    ~~Maven插件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    eclipse4.0以上版本都安装了maven插件
    eclipse4.0以下版本安装Mavne插件步骤:
    1.将Maven插件解压到eclipse的plugin文件下重启eclipse
    2.设置eclipse.ini 添加 -vm JDK的路径/bin/javaw.exe
    3.设置eclipse默认的jre为自己安装的jdk
    4.设置eclispe的maven的安装路径和安装的maven的setting.xml
    5.eclipse创建maven项目后
    ①,pom.xml右键maven build--Goals:compile 进行编译 报错:-Dmaven.multiModuleProjectDirectory system propery is not set.
    编辑第三步设置的jre:Default VM Arguments: -Dmaven.multiModuleProjectDirectory=$MAVEN_HOME(环境变量名)
    ②,pom.xml右键maven build--Goals:package 进行打包


    ~~完整的项目构建过程~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    清理,编译,测试,打包,集成测试,验证,部署


    生命周期
    注:如果执行生命周期后面的操作,则前面的操作会顺序执行
    (clean , compile , test , package , install 中如果执行了package后compile和test是会依次执行的)
    clean 清理
    --pre-clean 执行清理前的工作
    --clean 清理上一次构建生成的所有文件
    --post-clean 执行清理后的文件
    default 构建项目(最核心)
    --compile,test,package,install
    site 生成项目站点
    --pre-site 在生成项目站点前要完成的工作
    --site 生成项目的站点
    --post-site 在生成项目站点后要完成的工作
    --site-deploy 发布生成的站点到服务器上
    maven的命令都是使用maven的插件完成的
    例如:使用maven插件进行项目打包srouce操作:
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.4</version>
    //绑定到Maven的生命周期中package,即在打jar包的时候会自动source操作,将项目打包
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>jar-no-fork</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>


    POM.XML
    <project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ipudong.pdserver</groupId>//公司网址+项目
    <artifactId>pdserver</artifactId>//项目+模块
    <version>1.0.0-SNAPSHOT</version> //版本 SNAPSHOT快照,ALPHA内部测试,BATA公测,RELEASE稳定,GA正式发布
    <packaging>pom</packaging>//打包形式jar,war,pom,zip ...
    <name>pdserver</name>//项目描述名
    <url>http://maven.apache.org</url>//项目地址
    <description></description>//项目描述
    <developers></developers>//开发者
    <licenses></licenses>//许可证
    <organization></organization>//组织

    <dependencies>//依赖
    <dependency>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>

    <type></type>
    <scope></scope>//依赖的范围例如test,则只在测试时使用
    <optional></optional>//true或false,默认是false;若为true: 子项目必须引入 ;若为false:子项目默认可以继承

    <exclusions>//排除依赖传递列表 A-->B B-->C C对A是传递依赖,若A不想依赖C则使用此标签
    <exclusion></exclusion>
    </exclusions>
    </dependency>
    </dependencies>


    <dependencyManagement>//依赖的管理
    <dependencies>
    <dependency></dependency>//不会被运行,不会被引用到实际的依赖中,用于父模块中被子模块继承用的
    </dependencies>
    </dependencyManagement>


    <build> //提供构建的支持
    <plugins> //插件列表
    <plugin>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
    </plugin>
    </plugins>
    </build>

    <parent></parent>//子模块对父模块的继承
    <modules>//聚合多个Maven项目,可以一起进行编译
    <module>pdserver-service</module>
    <module>pdserver-util</module>
    <module>pdserver-core</module>
    <module>pdserver-client</module>
    <module>pdserver-timer</module>
    <module>pdserver-web</module>
    </modules>

    </project>


    依赖范围:scope
    <scope></scope>//依赖的范围例如test,则只在测试时使用
    maven三种classpath:编译,测试,运行
    scope用来设置三种classpath的关系
    默认:compile 编译测试运行都有效
    provided:编译测试
    runtime:测试运行
    test:测试
    system: 编译,测试;与本地系统相关联,可移植性差
    import: 导入范围,只使用在dependencyManagement中,表示从其他pom导入dependency的配置,例如:将项目模块A中依赖导入到项目模块B中

    依赖传递
    A-->B B-->C 对于A说C就是传递依赖
    创建Maven项目:A,B,C ;
    对A项目进行clean package,install;
    在B项目中进行引入依赖A项目;
    对B项目进行clean compile,clean install;
    再C项目中进行引入依赖B项目;
    对B项目进行clean compile;
    然后在C项目中发现A依赖也被引入了,这就是依赖的传递;如果要使A项目只被B依赖就使用排除依赖,
    在C项目中POM中定义exclusion,将B项目列入排除依赖列表,则A不会被C项目所依赖

    依赖冲突
    如果A和B依赖了不同版本的相同的构件,那依赖A和B的C考虑会依赖A和B哪个版本的构件?
    1.短路优先:优先解析路径短的版本,例如A-->B-->C-->X ; A-->D-->X;则A会优先解析D
    2.先声明先优先:如果路径长度相同,则谁先声明,先解析谁

    聚合
    聚合的项目的packaging为pom
    添加构件:
    <modules>
    <module>pdserver-service</module>
    <module>pdserver-util</module>
    <module>pdserver-core</module>
    <module>pdserver-client</module>
    <module>pdserver-timer</module>
    <module>pdserver-web</module>
    </modules>
    然后运行时会将子项目全部运行
    例如进行 clean install;则子项目全部会依次进行compile--package--install

    继承
    例如多个子项目都有共同的依赖,可以将共同的依赖在父项目中进行提取管理使用dependencyManagement
    父项目:
    <dependencyManagement>//依赖的管理
    <dependencies>
    <dependency>
    <dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.5</version>
    </dependency>
    </dependency>//不会被运行,不会被引用到实际的依赖中,用于父模块中被子模块继承用的
    </dependencies>
    </dependencyManagement>
    子项目:
    POM中引入父标签<parent>
    <parent>
    <groupId>com.ipudong.pdserver</groupId>
    <artifactId>pdserver</artifactId>
    <version>0.0.1SNAPSHOT</version>
    </parent>//子模块对父模块的继承
    创建Maven-WEB项目
    http://mvnrepository.com/ 在Maven仓库查找需要的依赖
    1.创建archetype-webapp的maven的web项目
    2.jsp文件报错缺少servlet,在pom添加servlet依赖
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>//编译测试时运行
    </dependency>
    3.创建Maven目录结构
    创建src/main/java,报错无法创建
    方法一:可以在Navigator中创建,然后更新;
    方法二:项目--properties--java build path--编辑Libraries中JRE System Library为自己安装的JRE 或者 Worksapce Default Jre
    方法三:修改classpath文件,删除创建不了的SourceFolder
    4.检查class文件的输出路径
    build path中source:Output folder为target下的classes
    5.将项目转为WEB项目
    项目--properties--project facets--选中Dynamic web module
    6.修改部署时的默认配置
    项目--properties--Deployment Assembly 删除test的文件,因为发布测试的时候并不需要这些测试
    7.安装jetty插件
    在pom中添加jetty插件:
    <plugins>
    <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.16.v20140903</version>
    </plugin>
    </plugins>
    8.运行
    pom.xml 右键--maven--maven build -- Goals输入jetty:run mvn jetty:run
    9.浏览器输入地址 : localhost:8080即可访问首页
    10.可以添加在打包操作时运行jettyrun操作
    <plugins>
    <plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.16.v20140903</version>
    //在打包成功后使用 jetty:run来运行jetty服务
    //绑定到Maven的生命周期中package,即在打jar包的时候会自动source操作,将项目打包
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>run</goal>
    </goals>
    </execution>
    </executions>

    </plugin>
    </plugins>
    11.pom执行clean package进行打包,部署

    12.使用tomcat进行打包部署,安装插件,pom执行clean package进行打包,部署
    <plugins>
    <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    //在打包成功后使用 jetty:run来运行jetty服务
    //绑定到Maven的生命周期中package,即在打jar包的时候会自动source操作,将项目打包
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>run</goal>
    </goals>
    </execution>
    </executions>

    </plugin>
    </plugins>


    ~~开发~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    mvn help:system 在用户下创建本地仓库~/.m2/repository
    mvn clean compile 清理编译
    mvn clean test 清理测试
    mvn clean package 清理打包
    mvn clean install 清理将打包好的jar存入本地仓库
    mvn archetype:generate 使用Archetype生成项目骨架
    mvn clean deploy 将项目发布到远程仓库中
    ~~目录结构~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/main/java
    src/main/resource
    src/test/java
    src/test/resource
    ~~依赖~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    mvn dependency:list 显示所有已解析的依赖
    mvn dependency:tree 以目录的形式展现依赖
    mvn dependency:analyze 第一部分显示已经使用但是未显示依赖的,第二部分显示项目未使用的但是依赖的
    ~~构建~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    构件:jar,war,依赖的jar, 插件
    构建:编译,测试,打包,发布
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    常见问题------------------------------------------------------------------------------------------------------------------------------------------------------
    0.pdbss中引用的pdmall的jar包无法更新
    解决:删除本地仓库中的jar,然后编译

    1.Maven创建不了src/main/java(SourceFolder)
    方法一:项目--properties--java build path--编辑Libraries中JRE System Library为自己安装的JRE 或者 Worksapce Default Jre
    方法二:修改classpath文件,删除创建不了的SourceFolder
    方法三:在eclipse里Navigator里面创建,然后更新
    2.创建完WEB项目后jsp文件报错缺少servlet
    解决:添加依赖
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>//编译测试时运行
    </dependency>
    3.编码GBK的不可映射字符
    方法一,修改eclipse中的jre为自己安装的JRE:D:PdDevjavaJRE
    方法二,修改maven编码
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    或者
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
    <source>1.5</source>
    <target>1.5</target>
    <encoding>UTF-8</encoding><!-- 指定编码格式,否则在DOS下运行mvn compile命令时会出现莫名的错误,因为系统默认使用GBK编码 --> </configuration>

    错误详情:
    E:MyFilesGit_Propdmallpdmall-client>mvn clean compile
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building pdmall-client 1.0.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ pdmall-client ---
    [INFO] Deleting E:MyFilesGit_Propdmallpdmall-client arget
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ pdmall-cli
    ent ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory E:MyFilesGit_Propdmallpdmall-clie
    ntsrcmain esources
    [INFO]
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ pdmall-client -
    --
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 2 source files to E:MyFilesGit_Propdmallpdmall-client arge
    tclasses
    [INFO] -------------------------------------------------------------
    [ERROR] COMPILATION ERROR :
    [INFO] -------------------------------------------------------------
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[12,36] 错误: 编码GBK的不可映射字符
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[13,32] 错误: 编码GBK的不可映射字符
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[13,37] 错误: 编码GBK的不可映射字符
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[13,38] 错误: 编码GBK的不可映射字符
    [INFO] 4 errors
    [INFO] -------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2.929 s
    [INFO] Finished at: 2016-05-06T15:04:39+08:00
    [INFO] Final Memory: 11M/150M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
    1:compile (default-compile) on project pdmall-client: Compilation failure: Compi
    lation failure:
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[12,36] 错误: 编码GBK的不可映射字符
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[13,32] 错误: 编码GBK的不可映射字符
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[13,37] 错误: 编码GBK的不可映射字符
    [ERROR] E:MyFilesGit_Propdmallpdmall-clientsrcmainjavacomiputongpdmall
    clientdomainuserExperienceDO.java:[13,38] 错误: 编码GBK的不可映射字符
    [ERROR] -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
    ch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please rea
    d the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureExc
    eption


    推荐几个好的 Maven 常用仓库网址:
    http://mvnrepository.com/
    http://search.maven.org/
    http://repository.sonatype.org/content/groups/public/
    http://people.apache.org/repo/m2-snapshot-repository/
    http://people.apache.org/repo/m2-incubating-repository/
    *groupId: 项目名pdserver:com.ipudong.pdserver
    *artifactId: 项目模块:pdserver-client
    *version: 版本
    *packaging: Maven项目的打包方式
    classifier: 定义附加的插件生成的附属构件
    文件名: artifactId-version[-classifier].packaging pdserver-core-1.0.0-SNAPSHOT.jar

    1.pom.xml--Overview
    ------Parent
    <parent>
    <groupId>com.ipudong.server</groupId>
    <artifactId>pdserver</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    </parent>
    ------Artifact
    <groupId>com.ipudong.server</groupId>
    <artifactId>pdserver-core<artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    ------Project
    <name>pdserver-core</name>
    <url>http://maven.apache.org</url>
    2.pom.xml--Dependencies
    <dependencies>
    <dependency>
    <groupId>com.ipudong.server</groupId>
    <artifactId>pdserver-client</artifactId>
    </dependency>

    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    </dependency>
    </dependencies>
    3.Eclipse导入Maven项目
    Maven下载项目Jar包
    Maven配置文件: D:PdDevapache-maven-3.3.9confsettings.xml 设置Jar包路径
    mvn eclipse:eclipse 生成Eclipse项目
    mvn dependency:copy-dependencies 下载Maven项目依赖的jar包
    Eclipse设置:windows--preferences--Maven--UserSettings--User Settings(Maven配置文件settings.xml) Update Settings
    Local Repository(Maven配置文件settings.xml里的localRepository,Maven下载Jar的路径)

    4.命令行
    <1>安装本地Jar到Maven本地仓库
    mvn install:install-file -Dfile=jar绝对路径 -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar
    <2>创建符号链接方便以后升级
    ln -s apache-maven-3.0 apache-maven
    <3>编译
    mvn clean compile //项目根目录 //clean: clean resources: resources complier: complie
    <4>调用Maven执行测试
    mvn clean test //clean:clean resources:resources complier:complie resources:testResources complier:testComplie
    <5>打包
    mvn clean package // jar:jar
    <6>让其他Maven项目直接引用这个jar包
    mvn clean install //install: install
    5.HTTP代理设置
    <proxies>
    <proxy>
    <id>optional</id>
    <active>true</active>
    <protocol>http</protocol>
    <username>proxyuser</username>
    <password>proxypass</password>
    <host>127.0.0.1</host>
    <port>8080</port>
    <nonProxyHosts>local.net|*.google.com</nonProxyHosts> 不需要代理的主机名
    </proxy>
    </proxies>

  • 相关阅读:
    SQL2008-表对表直接复制数据
    delphi debug release区别是什么?
    javascript中的for in循环和for in循环的使用陷阱
    JS操作DOM节点大全
    JS中for循环里面的闭包问题的原因及解决办法
    使用sessionStorage、localStorage存储数组与对象
    JS中substr和substring的用法和区别
    HBuilder使用夜神模拟器调试Android应用
    JSON.parse()和JSON.stringify()
    url中的特殊符号含义
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/6514304.html
Copyright © 2011-2022 走看看