maven问题整理

refer: http://www.jdonee.com/category/%E6%8A%80%E6%9C%AF%E4%B8%93%E6%A0%8F
/maven/maven%E9%97%AE%E7%AD%94%E6%94%B6%E9%9B%86/

Maven常见问题解答(三)
2010 年 11 月 06 日, 上午 12:44
1、为什么我在私服中存在的某个版本的依赖,而Eclipse项目中引用该依赖不成功,报”miss ***.jar”错误?

在当前工程目录下运行”mvn eclipse:eclipse”,然后在Eclipse下刷新该工程。



2、引用某个过时的Java API导致Maven出现ERROR警告导致编译失败,该怎么处理?

1)升级Java compiler插件的版本至2.3.2及以后。


org.apache.maven.plugins
maven-compiler-plugin
2.3.2


2)当然是修改你的API方法。



3、如何导出当前项目依赖的源码jar?

在当前项目下运行:

mvn dependency:copy-dependencies -Dclassifier=sources

默认会在${project.build.directory}/dependency里(一般是target目录下)。如果你要改变它的地址,就添加outputDirectory参数。比如要存放在d:dependency目录下,命令如下:

mvn dependency:copy-dependencies -Dclassifier=sources -DoutputDirectory=d:dependency

注:很有可能有些jar包没有提供源代码,导致你构建失败。那么你这种情况你可以通过excludeArtifactIds参数排除这些jar,多个jar直接用”,”分隔,命令如下:

mvn dependency:copy-dependencies -Dclassifier=sources -DexcludeArtifactIds=bcprov-jdk15,junit,……

关于dependency更多使用方式,请参阅Maven Dependency Plugin。



4、如何下载当前项目依赖的源码jar?

1)在当前项目下运行:

mvn dependency:sources

默认会安装在本地仓库。

2)如果你是在Eclipse环境下使用,通过“preferences”进入,点击“Maven”,勾选“Download Artifact Sources”。重启eclipse,构建工程时,就会下载依赖的源码jar。

原创文章,转载请注明: 转载自爱飞年代

本文链接地址: Maven常见问题解答(三)

文章的脚注信息由WordPress的wp-posturl插件自动生成

Popularity: 70% [?]

Category: Maven, Maven问答收集, 技术专栏 | 评论
Maven常见问题解答(二)
2010 年 11 月 05 日, 下午 8:33
1、POM的资源可继承吗?

当然可以,但只有在子POM没有任何资源的情况下。如果有,子POM只会应用当前的资源,并会覆盖父POM传递下来的相同资源。



2、Maven的继承顺序是怎样的?

1)parent pom

2)project pom

3)settings

4)命令行参数

其中后面的会覆盖前面的。



3、我在哪里可以获得Maven的Eclipse插件?

http://maven.apache.org/eclipse-plugin.html

这里还提供了一些关于如何使用该插件的Flash演示。



4、我该如何使用1.4.x的或1.5.x的JDK编译1.3的Java源代码?

您需要指定元素为1.3。











org.apache.maven.plugins

maven-compiler-plugin



true

true



1.3













5、如何在我的pom文件中引用windows 或者unix 环境变量?

从Maven 2.0.1开始,你可以在你的pom.xml或者settings.xml文件使用如下表达式引用windows 和unix 环境变量。

${env.VARNAME}

所以,你想要引用你的主目录环境变量,可以使用:

${env.HOME}



6、如何使子项目不继承父项目的目标(如install)?

使用inherited 属性,设置插件的配置为false。举例来说,如果你想安装父项目,而不想安装子项目。你可以在当前项目的install插件中进行如下配置:


maven-install-plugin

false




7、如何指定当前WAR模块继承父项目组WAR模块下的公共文件?

从maven-war-plugin 2.0-beta-3及以后的版块开始支持合并war。你只要在你的war模块中添加另一个类型为WAR的依赖,它们就会自动完成合并。

如果你想要获得更具体的操作,请查阅使用Maven WAR插件实现多Web应用间的重迭运用。



8、怎么在Maven2里配置相当于war插件的maven.war.src的目录结构?





org.apache.maven.plugins
maven-war-plugin







查看war插件的可配置属性可获得更多信息。



9、如何指定Eclipse插件生成的输出目录放入到.classpath文件里?


...



org.apache.maven.plugins
maven-eclipse-plugin

target-eclipse




...



10、如何为一个可执行jar添加主运行类?

配置maven-jar-plugin,然后添加主类:


org.apache.maven.plugins
maven-jar-plugin



com.mycompany.app.App






11、我能禁止使用传递依赖吗?

很抱歉,不能,不过你可以在项目里排除相关的依赖。

下面是一个关于排除依赖的示例:


















12、Maven中有没有方法在每次构建时不通过编辑pom或者配置文件就能够指定不同的输出目录吗?

当然有,你可以通过配置来完成这项工作。

要做到这一点,你只需在pom文件添加以下片段:


...

${directory}
${directory}/classes
${directory}/test-classes


target

...

现在你可以在命令行使用directory属性作为一个命令行参数来为它在运行时指定一个输出目录:

mvn -Ddirectory=tmp package

这样,${basedir}/tmp文件夹将作为新的输出目录。



13、我web项目中的自定义目录布局中有了一个web.xm文件,但是为什么我还是获得“Deployment descriptor WEB-INFweb.xml does not exist”错误呢?

你可以通过maven-war-plugin在你的Web应用中指定你web.xml文件的路径。





org.apache.maven.plugins
maven-war-plugin








14、我该如何在打包的Jar中过滤某些文件呢?

所有编译过的class文件总会放入打包的jar中。但是,你能配置通过使用compiler 插件的excludes 参数排除一些无须打包的文件。







org.apache.maven.plugins
maven-compiler-plugin


**/NotNeeded*.java










15、如何在deploy阶段期间部署我的二进制文件?


org.apache.maven.plugins
maven-assembly-plugin


install

assembly







然后执行”mvn deploy” 。



16、如何在surefire插件增加一个配置来阻止测试过程运行多次?

可以在插件的executions元素外声明如下配置:


org.apache.maven.plugins
maven-surefire-plugin
2.0



net.sourceforge.cobertura.datafile
C:cobertura.ser






17、如何使用不同的配置文件来执行assembly插件?

你可以在pom.xml文件里增加如下配置:


...


org.apache.maven.plugins
maven-assembly-plugin


1
install

assembly


src/main/descriptors/bin.xml
${project.build.finalName}-bin



2
install

assembly


src/main/descriptors/src.xml
${project.build.finalName}-src





...

然后执行mvn install,它将通过不同的配置执行assembly插件两次。



18、如何使用antrun插件生成源代码?

下面是你要在该插件的选项中生成源代码的步骤。注意:很有可能只有最新的SVN插件版本才支持。


org.apache.maven.plugins
maven-antrun-plugin





generate-sources
generate-sources













run




19、如何在Maven中针对多个阶段,执行ant 任务多次?

executions标签可以指定多个execution元素,ant的执行目标中可以针对不同的Maven阶段绑定不同的ID。


maven-antrun-plugin


one
generate-sources






run



two
package






run




20、为什么我没有在我的项目站点里获得生成的index.html页面?

这个原因通常是配置maven-project-info-reports plugin时忽略了”index”报告。


org.apache.maven.plugins
maven-project-info-reports-plugin



index
dependencies
cim
scm-list
issue-tracking




21、如何把静态的X(HTML)文件整合到我生成的站点里?

通过如下步骤你就能达到目的:

1)把你的静态页面放入到资源目录下,${basedir}/src/site/resources。

2)创建你的site.xml,并放入到${basedir}/src/site。xml示例:



Maven War Plugin
http://maven.apache.org/images/apache-maven-project.png
http://maven.apache.org/


http://maven.apache.org/images/maven-small.gif









${reports}


3)修改”menu”来链接静态页面,然后通过静态页的名称来创建选项和站点地图。






22、怎样从一个mojo里获取一个插件的依赖?

public class MyMojo extends AbstractMojo
{
/**
* @parameter expression="${plugin.artifacts}"
* @required
*/
private List pluginArtifacts;
public void execute()
throws MojoExecutionException
{
...
for ( Iterator i = pluginArtifacts.iterator(); i.hasNext(); )
{
Artifact pluginArtifact = (Artifact) i.next();
}
...
}
}
23、怎样从一个Mojo里获取项目的来源?

public class MyMojo extends AbstractMojo
{
/**
* @parameter expression="${project.compileSourceRoots}"
* @required
*/
private List sourceRoots;

public void execute() throws MojoExecutionException
{
...
for ( Iterator i = sourceRoots.iterator(); i.hasNext(); )
{
String sourceRoot = (String) i.next();
// Do what you want with these directories
}
}
}
24、如何在我的mojo里创建一个命令行参数(如-Dname=value )?

你可以在你的mojo里的参数字段中输入”expression=${}” 。

/**
* @parameter expression="${expression.name}"
*/
private String exp;
你现在就可以在命令行里运行参数:

“mvn -Dexpression.name=value install”



原创文章,转载请注明: 转载自爱飞年代

本文链接地址: Maven常见问题解答(二)

文章的脚注信息由WordPress的wp-posturl插件自动生成

Popularity: 100% [?]

Category: Maven, Maven问答收集, 技术专栏 | 1 条评论
Maven常见问题解答(一)
2010 年 11 月 05 日, 下午 8:06
1、如何阻止编译时出现”[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!”这样的警告?

出现类似这样的情况很多,这是因为如果你没有为编译的文件指定编码格式的话,它一般就会引用系统本身的编码,解决的办法也很简单,你只要在pom.xml(或者父项目的pom.xml)下的设置如下属性:

通用设置:







UTF-8







M3设置:







UTF-8









2、如何阻止把某些JAR包添加到WEB-INF/lib文件夹下?因为我只是想在编译时使用它!

把依赖的范围级别定义为provided,这样可以避免运行时依赖冲突。

3、如何确定我使用的是哪个版本的插件?

你可以使用Maven Help 插件的describe目标。比如你要查看install插件的当前版本:

mvn -Dplugin=install help:describe

如果想要更详细的信息,增加-Ddetail。

mvn -Dplugin=install help:describe -Ddetail

注意:这里的参数是插件的目标前缀,而不是构件的ID。比如 Maven Install Plugin的构件ID是:maven-install-plugin,而前缀是install。

4、我如何在一次Maven构建中使用ant任务?

目前有两个选择。

1)按照 instructions given in the Ant documentation自己实现。

2)如果你只需要在你的Maven构建里使用少量的ant脚本,那么你可以使用AntRun插件。



5、那么我如何在一次Ant构建中使用Maven的特性呢?

Maven Ant Tasks可以让Ant构建使用Maven的很多特性,诸如依赖管理、仓库部署等等。



6、我如何在Maven编译代码时自定义JVM的源代码和输出格式呢?

你必须在pom.xml文件里设置source和target参数。比如你要设置JVM的源代码和输出格式为1.5,那么在pom文件里可以如下设置:











org.apache.maven.plugins

maven-compiler-plugin

2.0.2



1.5

1.5















7、我是否可以在Maven中创建自己的目录结构呢?

当然可以。通过配置部分的其它元素。此外,如果你不使用默认的文件/目录格式的话,你还必须修改相关插件的配置。

坦白讲,这是一件得不偿失的事情。



8、我如何查找Maven的源代码呢?

源代码可以通过Maven版本库找到。

如果要查阅更多信息,请点击Building Maven 2.0。



9、为何我不能正确下载Maven的依赖?

你很有可能是因为公司网络的原因限制下载,不过你可以为Maven配置一个代理。具体的操作可以参阅配置代理。

10、我想把一个Jar存放到我的本地仓库,该怎么做?

如果你了解Maven的仓库布局,它会直接复制jar过去,Maven会在下一次运行时自动发现。

如果你不了解Maven的仓库布局,你可以在命令行中使用如下的命令加载Jar文件(此命令为一行,切莫回车)。

mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging= -DgeneratePom=true

其中: 需加载的文件路径

该文件的组ID

该文件的构件ID

该文件的版本

该 文件的打包格式,如jar



11、如何跳过测试?

你可以在命令行增加-Dmaven.test.skip=true或-DskipTests=true参数,前者会跳过测试的编译和执行,后者仅仅跳过测试的执行。更多示例请查阅Surefire插件的跳过测试部分。



12、如何在Maven中运行一个单元测试?

在命令行增加-Dtest=MyTest参数。注:不能指定包名,如(org.apache.x.y.MyTest)



13、如何处理站点的特殊字符?

首先配置你的IDE使用正确的编码。如果使用Eclipse,在eclipse.ini中增加 -Dfile.encoding=ISO-8859-1。

在你的pom文件中配置你的输出编码:





org.apache.maven.plugins

maven-site-plugin

2.0-beta-6



UTF-8







然后在MAVEN_OPTS中增加跟IDE一样的编码格式,如MAVEN_OPTS=”-Dfile.encoding=ISO-8859-1″。本人不推荐直接修改Maven的BIN目录下的mvn文件,而是添加一个环境变量MAVEN_OPTS。



14、如何在我的依赖中添加tools.jar?

下面的代码可以把tools.jar包含在Windows, Linux 和 Solaris系统的JDKs中(Mac OS X和其它免费的JDKs中已经包含了)。







default-tools.jar





java.vendor

Sun Microsystems Inc.









com.sun

tools

1.4.2

system

${java.home}/../lib/tools.jar











15、Maven编译了我的测试类,但是为什么不运行呢?

测试一般都是由Surefire插件运行的。Surefire插件用来配置运行某些测试类,你很有可能无意中指定了${test}这样的值。检查你的settings.xml和pom.xml文件,看有没有命名为”test”的属性,如下列方式:







test

some-value







或者





some-value





16、Maven的SNAPSHOT(快照)构件存放在哪里?

如果你想要使用Maven或者插件的快照来进行构建,那么你应该要访问Maven快照仓库。

你可能需要通过快照仓库使用指南更新你的settings文件。



17、Maven 的XSD schemas存放在哪里?

Maven XSD 存放在这里,Maven Settings XSD 存放在这里。

你的IDE很有可能支持pom.xml和settings.xml的编辑。你很有可能需要指定以下内容:


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

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd“>






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“>







18、如果Maven不能正常工作,我该如何获取帮助?

Maven官方编制了一个可用帮助列表。



19、如何在Maven构建时产生调试或者错误信息呢?

你可以在Maven构建是调用-X(必须大写)或者-e参数。如果你要了解更多信息,在命令行执行:mvn –help



20、Mojo是什么?

Mojo是Maven中一个普通的持久化对象。每一个Mojo都是Maven中的一个执行目标,一个插件一般包含一个或者多个相关的Mojo。



21、怎样在公共Maven仓库中寻找依赖?

你可以使用下列搜索引擎:

http://repository.apache.org

http://www.artifact-repository.org

http://mvnrepository.com

http://www.mvnbrowser.com

http://www.jarvana.com

http://mavensearch.net

你可能感兴趣的:(JEE整理)