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及以后。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>

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源代码?

您需要指定<compilerVersion>元素为1.3。

<project>



<build>

<plugins>

<plugin>

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

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

<configuration>

<verbose>true</verbose>

<fork>true</fork>

<executable><!– path-to-javac –></executable>

<compilerVersion>1.3</compilerVersion>

</configuration>

</plugin>

</plugins>

</build>



</project>

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

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

${env.VARNAME}

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

${env.HOME}



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

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

<plugin>
<artifactId>maven-install-plugin</artifactId>
<configuration>
<inherited>false</inherited>
</configuration>
</plugin>


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

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

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



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

<build>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warSourceDirectory><!– 目录地址–></warSourceDirectory>
</configuration>
</plugin>
</plugins>

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



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

<build>
...
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<outputDirectory>target-eclipse</outputDirectory>
</configuration>
</plugin>
</plugins>
</pluginManagement>
...
</build>


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

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.mycompany.app.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>


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

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

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

<project>

<dependency>
<groupId><!– group id –></groupId>
<artifactId><!– artifact id –></artifactId>
<version><!– version –></version>
<scope><!– scope –></scope>
<exclusions>
<exclusion><!–排除的依赖都写着这里–>
<groupId><!– groupId –></groupId>
<artifactId><!– artifactId–></artifactId>
</exclusion>
</exclusions>
</dependency>
</project>


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

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

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

<project>
...
<build>
<directory>${directory}</directory>
<outputDirectory>${directory}/classes</outputDirectory>
<testOutputDirectory>${directory}/test-classes</testOutputDirectory>
</build>
<properties>
<directory>target</directory> <!-- 设置默认 -->
</properties>
...
</project>
现在你可以在命令行使用directory属性作为一个命令行参数来为它在运行时指定一个输出目录:

mvn -Ddirectory=tmp package

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



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

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

<build>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml><!– web.xml的路径 –></webXml>
</configuration>
</plugin>
</plugins>
</build>


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

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

<project>

<build>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/NotNeeded*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>

</build>
</project>



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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>assembly</goal>
</goals>
<configuration>
<!– 这里输入你的配置 –>
</configuration>
</execution>
</executions>
</plugin>
然后执行”mvn deploy” 。



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

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.0</version>
<configuration>
<systemProperties>
<property>
<name>net.sourceforge.cobertura.datafile</name>
<value>C:cobertura.ser</value>
</property>
</systemProperties>
</configuration>
</plugin>


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

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

<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>1</id>
<phase>install</phase>
<goals>
<goal>assembly</goal>
</goals>
<configuration>
<descriptor>src/main/descriptors/bin.xml</descriptor>
<finalName>${project.build.finalName}-bin</finalName>
</configuration>
</execution>
<execution>
<id>2</id>
<phase>install</phase>
<goals>
<goal>assembly</goal>
</goals>
<configuration>
<descriptor>src/main/descriptors/src.xml</descriptor>
<finalName>${project.build.finalName}-src</finalName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
然后执行mvn install,它将通过不同的配置执行assembly插件两次。



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

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<dependencies>
<!– 你脚本执行必须的依赖 –>
</dependencies>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<tasks>
<!– 这里嵌入你的ant任务,也可以委托给一个build.xml–>
<path id=”classpath”>
<path refid=”maven.compile.classpath”/>
<path refid=”maven.plugin.classpath”/>
</path>
<ant antfile=”${basedir}/build.xml” dir=”${basedir}” inheritRefs=”true”>
<target name=”generate-sources”/>
</ant>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
19、如何在Maven中针对多个阶段,执行ant 任务多次?

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

<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>one</id>
<phase>generate-sources</phase>
<configuration>
<tasks>
<echo message=” start generate-sources!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!”/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>two</id>
<phase>package</phase>
<configuration>
<tasks>
<echo message=” start packaging!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!”/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
20、为什么我没有在我的项目站点里获得生成的index.html页面?

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<reportSets>
<reportSet>
<reports>
<report>index</report> <!–这里–>
<report>dependencies</report>
<report>cim</report>
<report>scm-list</report>
<report>issue-tracking</report>
</reports>
</reportSet>
</reportSets>
</plugin>
21、如何把静态的X(HTML)文件整合到我生成的站点里?

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

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

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

<project name="Maven War Plugin">
<bannerLeft>
<name>Maven War Plugin</name>
<src>http://maven.apache.org/images/apache-maven-project.png</src>
<href>http://maven.apache.org/</href>
</bannerLeft>
<bannerRight>
<src>http://maven.apache.org/images/maven-small.gif</src>
</bannerRight>
<body>
<links>
<item name="Maven 2" xhref="http://maven.apache.org/maven2/"/>
</links>
<menu name="Overview">
<item name="Introduction" xhref="introduction.html"/>
<item name="How to Use" xhref="howto.html"/>
</menu>
${reports}
</body>
</project>
3)修改”menu”来链接静态页面,然后通过静态页的名称来创建选项和站点地图。

<menu name="Overview">
<item name="Introduction" xhref="introduction.html"/>
<item name="How to Use" xhref="howto.html"/>
<item name="<put-name-here>" xhref="<filename-of-the-static-page>"/>
</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=${<exp>}” 。

/**
* @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)下的设置如下属性:

通用设置:

<project>



<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>



</project>

M3设置:

<project>



<properties>

<sourceEncoding>UTF-8</sourceEncoding>

</properties>



</project>



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文件里可以如下设置:



<build>



<plugins>

<plugin>

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

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

<version>2.0.2</version>

<configuration>

<source>1.5</source>

<target>1.5</target>

</configuration>

</plugin>

</plugins>



</build>





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

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

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



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

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

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



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

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

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

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

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

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true

其中: <path-to-file> 需加载的文件路径

<group-id> 该文件的组ID

<artifact-id> 该文件的构件ID

<version> 该文件的版本

<packaging> 该 文件的打包格式,如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文件中配置你的输出编码:



<plugin>

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

<artifactId>maven-site-plugin</artifactId>

<version>2.0-beta-6</version>

<configuration>

<outputEncoding>UTF-8</outputEncoding>

</configuration>

</plugin>



然后在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中已经包含了)。



<profiles>

<profile>

<id>default-tools.jar</id>

<activation>

<property>

<name>java.vendor</name>

<value>Sun Microsystems Inc.</value>

</property>

</activation>

<dependencies>

<dependency>

<groupId>com.sun</groupId>

<artifactId>tools</artifactId>

<version>1.4.2</version>

<scope>system</scope>

<systemPath>${java.home}/../lib/tools.jar</systemPath>

</dependency>

</dependencies>

</profile>

</profiles>



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

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



<properties>

<property>

<name>test</name>

<value>some-value</value>

</property>

</properties>



或者



<properties>

<test>some-value</test>

</properties>



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

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

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



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

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

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

<project xmlns=”http://maven.apache.org/POM/4.0.0″

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



</project>

<settings xmlns=”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“>



</settings>



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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值