Maven开发环境的搭建,含jetty调试[简单明了]

时间:2023-03-08 22:07:26

之前的一片老文,搬过来。

1. Maven的开发环境需要哪些部件
a) Maven。
去http://maven.apache.org/ 下载。将其bin目录加入进系统PATH。测试方法:用命令mvn –version。

Maven开发环境的搭建,含jetty调试[简单明了]
b) m2eclipse插件(可选)。
如果你习惯命令行的方式用maven,可以忽略。在线安装的site为http://download.eclipse.org/technology/m2e/releases/1.4 如果你在安装插件过程中因某些原因导致下载或安装失败,请寻找安装了m2eclipse的eclipse包。一般来讲安装m2eclipse插件的时候,会需要依赖一些其他的插件,然而部分这些被依赖的插件,又恰巧会不幸下载失败,导致了m2eclipse插件安装的时候失败的可能性比较大。所以建议全程*。
c) 私服。
这里以nexus为例子。
i. 为什么要私服
1. 针对项目组不能直接连接外网或者不能直接从外网下载jar的情况,私服可以充当一个代理的角色。
2. 部分你所依赖的jar因为某些原因不在*仓库。比如oracle的JDBC驱动就因版权问题不在*仓库。所以你要自己将ODBC维护在你的私服上。
3. 项目组内多小组使用maven开发,小组之间的jar又存在依赖关系。私服可以用来发布小组的jar提供给其他小组依赖。
ii. 怎么部署nexus
1. 去http://download.sonatype.com/nexus/oss/nexus-2.8.0-05-bundle.zip 下载。如无法下载,请去http://www.sonatype.org/nexus/go 寻找新的下载链接。如果你有tomcat服务器可以直接下载他的war来部署。
2. 注意:目前的nexus新版本需要JDK7+。第一次使用需要安装: 去nexus-2.6.0-05-bundle\nexus-2.6.0-05\bin目录下 nexus.bat install(注意如果是win7用户,需要用管理员方式启动cmd。否则权限不够,下同)
3. 启动 nexus.bat start
4. 需要修改端口号的:修改conf/ nexus.properties文件中application-port字段即可。如果是war包部署的,直接修改tomcat的端口号。Orz.
5. 访问http://localhost:8081/nexus 管理员的用户名和密码是 admin/admin123

2. Maven工程的创建及目录结构的介绍
a) 使用之前先配置eclipse中的maven插件
Window/Preferences/Maven/Installations add 你自己安装的maven,不要用插件自带的。继续修改User Settings,选择你自己maven的conf目录下的settings.xml文件。
b) 修改settings文件。
就在a步骤中配置settings文件路径的地方,有open file,这样就在eclipse中打开了settings.xml文件,找到mirrors标签,加上镜像配置,修改后类似下面所示:

<mirrors>
<mirror>
<id>internal_repo</id>
<name>Internal Repo Manager</name>
<url>http://localhost:8081/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

Localhost就是你部署nexus的私服的地址,根据自己的实际情况,自行修改。
c) 创建工程
使用eclipse的向导new/Maven project/next/next/填写GroupId(例如org.simonme),artifact ID 如demo1,package 如org.simonme.demo1,finish。
d) 增加依赖的jar
比如以开发者需要依赖apache的common lang3。用google搜索关键字maven apache common lang,即可以找到 http://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.0 这个链接,进去查看,将maven页签下的依赖信息复制下来直接贴到工程的pom.xml dependencies中。此时观看工程左边的maven依赖库就能看common lang已经被自动加入进工程的classpath中。如下图:

Maven开发环境的搭建,含jetty调试[简单明了]
在App.java中用代码测试下

package org.simonme.demo1;

import org.apache.commons.lang3.StringUtils;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
System.out.println(StringUtils.isEmpty(""));
}
}

没问题能正常运行。
e) 在工程上右击, Run as/Maven test
这样可以将整个工程编译并运行单元测试。
f) 如果要创建一个web工程
修改pom.xml的jar成war
g) 对工程打包
在命令行中,去工程的目录下,mvn clean package。还可以跳过单元测试进行打包,加上-Dmaven.test.skip=true即可。
3. 在私服上上传jar
这种情况主要针对*仓库没有你要的jar。
http://localhost:8081/nexus admin登陆后,点击左边的Repositories,选择右上3rd party仓库,不要选其他仓库,选择右下的Artifact Upload,GAV Definition: 选择From POM,选择你要上传jar的pom文件(如果你没有,可以去网上搜索),上传你的jar。
4. 关联source和doc
当你在写代码的时候需要看哪个类的代码的时候,f3以后,代码jar会被自动下载和关联上来,方便的很。(第一次按,会有点慢,注意eclipse的右下角,Download source…)
如果maven没有自动下载源码jar或者javadoc jar:
先检查是否在首选项中开启了这个功能
Maven开发环境的搭建,含jetty调试[简单明了]

若是还是下载不了的。可以尝试下面这个办法:
那就去你的本地仓库 删除.lastUpdated结尾的文件!!

本地仓库我用的是默认的C:\Users\chenxiaguang\.m2\repository

然后执行下面的命令
mvn dependency:resolve -Dclassifier=javadoc -U
mvn dependency:resolve -Dclassifier=source  -U

执行成功后类似这样:
Maven开发环境的搭建,含jetty调试[简单明了]

有时候这个办法也不行,可以重启eclipse后依靠m2eclipse的自动source jar的功能试试。

这个问题我目前还没时间去彻底调查清楚。

5. 用jetty调试工程
参见 http://hi.baidu.com/yyjt1987/item/f55a2ab1538cc8d184dd79ad 图文并茂,经验证可用。

百度空间关闭了,上面的链接用不了,重新贴一个写的比较详细的,图文并茂的maven工程开启jetty调试 http://czj4451.iteye.com/blog/1942437

6. eclipse中jar不能自动下载问题

在eclipse中创建了新的maven工程后,修改pom增加需要依赖的jar,在增加jar依赖时,经常出现jar包不能自动下载,导致编译出错。

解决办法:
在命令行执行mvn clean install
然后在eclipse中右击工程maven/update project

7. war包的问题

在pom文件中增加war插件依赖

<build>
<filters>
<!-- 过滤文件,通常是一个属性文件(名值对的形式) -->
<!-- <filter>src/main/webapp/META-INF/auto-config.properties</filter> -->
<!-- <filter>${user.home}/antx.properties</filter> -->
</filters>
<finalName>hibernate_demo</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 打包之前过滤掉不想要被打进 .war包的jar,注意:这个地方,本来路径应该是 WEB-INF/lib/anaalyzer-2.0.4.jar,但是经过多次试验,不能这样,至于咋回事儿,搞不清楚。。经多方查证均无结果
暂且这样吧,虽然显得很丑陋,但是总能解决问题吧 -->
<warSourceExcludes>*/lib/analyzer-2.0.4.jar</warSourceExcludes>
<webResources>
<resource>
<!-- 元配置文件的目录,相对于pom.xml文件的路径 -->
<directory>src/main/webapp/WEB-INF</directory> <!-- 是否过滤文件,也就是是否启动auto-config的功能 -->
<filtering>true</filtering> <!-- 目标路径 -->
<targetPath>WEB-INF</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>

8.Maven项目编译后classes文件中没有.xml问题

参见 http://www.cnblogs.com/wbb2109/p/3999247.html

在pom的build标签内加一段配置即可

<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>

其实出现这个问题是由于不规范造成的,按maven的目录规划,xml属于资源文件,需要将其放到resource下,这样的mvn在编译的时候会自动将其copy到clasess中

Maven开发环境的搭建,含jetty调试[简单明了]

当你按规范的去放置文件后,就需要将上面的resources配置去掉了。

9. 添加只用于测试期或者编译期的jar

有时候我们需要添加只用于编译期的jar,比如servlet的jar
或者只用于测试的比如 junit的
怎么做,用scope就可以了

<!-- 添加Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
    * compile,缺省值,适用于所有阶段,会随着项目一起发布。
    * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

10. 打出来的war包中的classes中没有文件

1) 检查src/main下是否有java类或者资源文件,打war包时,mvn是不会将test下的类或者资源打进war包的!!

11. 打包时跳过单元测试

mvn package -Dmaven.test.skip=true

12. 打包时在命令行中指定编译用的JDK版本

mvn package -Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8

13. 带上依赖jar的打包

     <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<finalName>TestLegionStore</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef> <!-- 内置配置:这里使用的是jar-with-dependencies -->
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.ss.middleware.TestLegionStore</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin> </plugins>
</build>

14. 在POM中指定编译用的JDK版本

     <build>
<plugins>
<!-- 指定jdk版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!-- 源码的编译器版本 -->
<source>1.7</source>
<!-- class的编译器版本 -->
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>