John Jiang

a cup of Java, cheers!
https://github.com/johnshajiang/blog

   :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 1 文章 :: 530 评论 :: 0 Trackbacks
Maven Weed
学习、使用Maven的过程中,亲身遇到或看到的一些问题的解决方法。Maven有不少Bug,大家使用时一定要小心。(2007.02.10最后更新)

向本地仓库安装文件
    mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
-DgeneratePom=true -DcreateChecksum=true(需要使用maven-install-plugin 2.2-SNAPSHOT)

打包时,不在META-INF中生成maven目录
    使用Maven打包(mvn package)时,默认地会在META-INF中生成一个目录maven,里面是一个pom和一个属性文件。如果不想生成这个目录,需要在POM中进行如下配置:
以对于一般应用程序打包,即制作jar包为例
<build>
 
<plugins>
   
<plugin>
     
<groupId>org.apache.maven.plugins</groupId>
     
<artifactId>maven-jar-plugin</artifactId>
     
<configuration>
       
<archive>
         
<addMavenDescriptor>false</addMavenDescriptor>
       
</archive>
     
</configuration>
   
</plugin>
 
</plugins>
</build>
如果你在打jar包(mvn package)时,报如下错误:
[INFO] Failed to configure plugin parameters for: org.apache.maven.plugins:maven-jar-plugin:2.0
Cause: Cannot find setter nor field in org.apache.maven.archiver.MavenArchiveConfiguration  for 'addMavenDescriptor' 
这是由于maven-jar-plugin的版本不够高(很可能是2.0版本),需要升级到最新的2.1版本。运行命令mvn -U package,会先下载最新版本,再执行打包操作。
    类似的,对于制作war,ear包,只需要将artifactId换成对应的plugin(
maven-war-plugin maven-ear-plugin )就可以了。

Javadoc中文乱码
    中文操作系统中,JDK1.5.0的Javadoc自动默认支持中文,而且页面中的条目名也都默认为中文显示(在之前的JDK中,这些条目名都默认为英文)。
如是在这种情况下使用命令mvn javadoc:javadoc生成Javadoc,则这些条目名将成为乱码。
    解决方法:让javadoc插件使用UTF16或Unicode字符集。具体配置的形式如下:
<build>
 
<plugins>
   
<plugin>
      
<groupId>org.apache.maven.plugins</groupId>
      
<artifactId>maven-javadoc-plugin</artifactId>
      
<configuration>
        
<charset>UTF16</charset>
      
</configuration>
    
</plugin>
 
</plugins>
</build>

Scope
Scope表示了某个依赖关系的适用范围(作用域),共有5个scope。
compile: 默认的适用范围,表示该依赖关系要应用于所有的classpath。
provided: 该适用范围非常像compile适用范围。但它表示该依赖关系已经由JDK或某个容量提供,如javax.servlet。
runtime:表示该依赖关系不用于编译阶段,而只使用于运行时阶段,如apache jakarta commons。
test:表示该依赖关系并不用于实际的应用程序本身,而是该应用的测试程序的编译与运行,如junit。
system:该依赖关系类似于provided,但必须显示地表示是哪一个容器提供了这个artifact。无法在仓库中找到该artifact。
注意:
[1]具有compile或runtime适用范围的依赖关系中的jar文件,制作war文件时将会被放入WEB-INF/lib目录中。
[2]不推荐使用system适用范围。

将mvn.bat配置为Eclipse外部工具
为了能够在Eclipse环境中运行mvn.bat,需要将它配置为一个外部工具(external tool)。在我的Eclipse Weed(配置外部工具)一文中已经提到了如何配置Eclipse External Tools(可先参见该文)。本主题将具体讲述如何将mvn.bat的package Build周期短语配置为外部工具。
[1]主菜单Run-->External Tools-->External Tools...
[2]先选中Program项,再点击左上角的New launch configuration按钮
[3]Name文本框中输入该外部工具的名称“MvnPackage”
[4]通过Browser File System...按钮,向Location文本框中输入mvn.bat文件的绝对路径
[5]通过Variables...按钮,选择project_loc,将向Working Directory文本框中输入${project_loc}
[6]在Augments文本域中输入package
这样当你选中一个pom.xml文件后,再运行该外部工具,就相当于对该POM文件文件执行mvn package命令。

制作war文件时,过滤文件
使用maven-war-plugin制作war文件时,它会先将所有可能用于制作war的内容放入target/artifactId-version目录(标准目录结构)下,然后再将这些文件进行打包。这样就有两种方法进行文件过滤:[1]使期望被过滤的文件一开始就不被放入
target/artifactId-version目录,即使它成为不可能的文件;[2]在制作war文件时,不将期望被过滤的文件加入包中。
[1]实现第一种方法,要对dependency进行配置。将不希望加入包的artifact放入exclusion参数中,如下脚本所示:
<dependency>
    
<groupId>commons-configuration</groupId>
    
<artifactId>commons-configuration</artifactId>
    
<exclusions>
        
<exclusion>
            
<groupId>dom4j</groupId>
            
<artifactId>dom4j</artifactId>
        
</exclusion>
    
</exclusions>
</dependency>
[2]实现第二种方法,要对maven-war-plugin进行配置,将
不希望加入包的资源文件(不再称之为artifact)放入warSourceExcludes参数中,如下脚本所示:
<build>
    
<plugins>
        
<plugin>
            
<groupId>org.apache.maven.plugins</groupId>
            
<artifactId>maven-war-plugin</artifactId>
            
<version>2.0.1</version>
            
<configuration>
                
<warSourceExcludes>WEB-INF/lib/dom4j-1.4.jar</warSourceExcludes>
            
</configuration>
        
</plugin>
    
</plugins>
</build>
注意:上述方法都不仅仅是过滤掉dom4j的jar文件,它还会过滤掉dom4j所依赖的其它文件(artifact)。

当加载插件时抛NullPointerException
如果仓库中有某个插件的jar文件有问题,则会抛出这样的异常。遇到这样的问题时,必须将这个有问题的插件清除。
可以在执行参数中加上-X(如mvn -X compile)来获得加载插件的过程,从中可能会发现问题插件。如果还不行,则使用一个新的仓库,再次执行工程。

Install或Deploy源代码
<project>
    <build>
        <plugins>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
使用如上的脚本即可,但该脚本只能针对jar文件,而不能针对war或ear...文件。maven-source-plugin并没有提供install或deploy Web工程源代码的goal。

在命令行中设置本地仓库
在使用Maven2命令(mvn)时,可以设置本地仓库的路径,该路径将会替代settings.xml中设置的本地仓库路径。
如命令,mvn -Dmaven.repo.local=Another_Local_Repo package
注:在Maven1中还可以通过-Dmaven.repo.remote设置远程仓库,但目前在Maven2中还不行。

在Maven发行包中找到Super POM文件
所有的POM都默认继承Super POM,该POM定义了Maven标准目录结构。但在Maven的发行包中,这个Super POM是存放在了哪里呢?
这个POM就存放在maven-project的jar文件中。在笔者的机器中,该Super POM的位置是:
Maven_Home/lib/maven-project-2.0.4.jar/org/apache/maven/project/pom-4.0.0.xml

构建Maven远程仓库
构建Maven远程仓库的方法很多,也很简单。常用的Web服务器(Apache,JBoss,Tomcat,...)都可以用于构建Maven远程仓库;而发布artifact时,也可以使用多种协议(FTP,SFTP,SSH,...)。
此处使用RedHat AS 4.0 + Apache2.0.59,并应用SSH协议向远程仓库发布artifact。
[1]在Apache的DocumnetRoot中新建目录maven2/repo,此处该目录的绝对路径为
/usr/local/apache2/htdocs/maven2/repo
[2]在本地Maven的settings.xml文件中设置Server,语句的形式如下:
<servers>
  <server>
    <id>myrepo</id>
    <username>myuser</username>
    <password>mypasswd</password>
  </server>
</servers>
myuser/mypasswd是登录远程Linux系统时使用的用户名/密码。
[3]在本地工程的pom.xml中进行如下形式的设置:
<distributionManagement>
    <repository>
        <id>myrepo</id>
        <url>scp://Host/usr/local/apache2/htdocs/maven2/repo</url>
    </repository>
</distributionManagement>
此处id必须与前面设置的server中的id一致;scp是使用SSH协议的文件传输命令;Host是远程Linux服务器的IP地址或域名;/usr/local/apache2/htdocs/maven2/repo就是Maven仓库在远程服务器中的绝对路径。
[4]在本地中使用命令mvn deploy发布artifact到远程仓库中。
[5]
启动Apache服务器, 通过地址http://Host/maven2/repo,就可以看到刚刚发布artifact了。

updating...
posted on 2006-09-11 13:37 John Jiang 阅读(6469) 评论(34)  编辑  收藏 所属分类: Maven

评论

# re: Maven + Continuum Weed 2006-12-04 14:41 zhengoodman
不好意思,弱弱的问一下。我想把web程序部署到tomcat下,要用到什么插件,如何才能下载这个插件?
我看http://mirrors.ibiblio.org/pub/mirrors/maven2/plugins/org/apache/maven/plugins/maven-deploy-plugin/2.0-alpha-3/
下面有maven-deploy-plugin-2.0-alpha-3.jar包。
http://mirrors.ibiblio.org/pub/mirrors/maven2/maven/maven-deploy-plugin/下面有maven-deploy-plugin.jar的1.3版本。不知应该下载哪个?pom文件应该怎么写?把他自带的pom文件的内容拷过来就行吗?  回复  更多评论
  

# re: Maven + Continuum Weed 2006-12-04 20:24 Sha Jiang
这个deploy插件是向Maven远程共享仓库发布artifact时使用的,与Web/App Server没什么特别的关系。
再说使用插件时,只需要在pom.xml中进行声明,不需要自己直接下载。Maven会自动下载Central Repository中存有的artifact(包括它们的pom.xml文件)。

就如我的另一篇文章
http://www.blogjava.net/jiangshachina/archive/2006/11/24/83331.html
中所说的,想向JBoss部署Web应用,就需要使用针对JBoss的Maven插件。

maven-tomcat-plugin也许是你想要的
http://www.codeczar.com/products/maven-tomcat-plugin/
但该插件似乎不在Maven中央仓库中,但你可以在它的主页中直接下载。
Good Luck!

  回复  更多评论
  

# re: Maven + Continuum Weed 2006-12-05 08:46 zhengoodman
我自己也没搞清楚。昨天问完后,看资料才知道deploy是干什么用的。有没有好的讲maven2的教程或网站,推荐一下啊。
你写的4篇关于maven的文章我都看过了。有的还看了好几遍。哈哈。
以后还请多多关照啊。  回复  更多评论
  

# re: Maven + Continuum Weed 2006-12-06 11:23 Sha Jiang
我的关于Maven的文章其实还比较简单,上次说的一篇较复杂的文章也一直没时间写完。唉~~~
不过,本周就准备写完,哈哈~~~

关于Maven2的好网站?
只能是官方网站了,哈哈
其实更好的地方是它的官方Mail List。你可以加入,然后在里面提问。
我就是这样的,不懂就问嘛。老外还是很热心的,确实获益良多。

关于Maven2的好书?
不得不推荐一下《Better Build with Maven》
这本书是免费的,网上应该早就传开了。
它的官方获取地址:http://www.mergere.com/m2book_download.jsp
也可以下载到书中的源代码,非常不错 :D
  回复  更多评论
  

# re: Maven + Continuum Weed 2006-12-07 10:21 zhengoodman
非常感谢,你真热心。  回复  更多评论
  

# re: Maven + Continuum Weed 2006-12-07 10:32 zhengoodman
不过你给的链接我访问不了啊,连http://www.mergere.com这个网址都打不开。另外,你上次说的那个tomcat的插件我也下载不了啊(没找到下载的地方,倒是看了一天的文档)。你确定http://www.mergere.com现在还能访问吗?  回复  更多评论
  

# re: Maven + Continuum Weed 2006-12-09 12:59 Sha Jiang
> 你确定http://www.mergere.com现在还能访问吗
我访问mergere的站点是没问题的。

> 你上次说的那个tomcat的插件我也下载不了啊(没找到下载的地方,倒是看了一天的文档)。
上次我只是简单的搜索了一下,没尝试那个插件。
今天在官方的Mail List中查了一下,发现那个插件已经更名,并且放在了codehause的mojo项目中了。
http://mojo.codehaus.org/tomcat-maven-plugin/introduction.html
  回复  更多评论
  

# re: Maven Weed 2007-01-08 09:42 fy
请教个问题,我的web项目下有webapp和config两个目录,我想把config中的一个文件,打到webapp.war包的/WEB-INF/下,怎么办呢?  回复  更多评论
  

# re: Maven Weed 2007-01-08 17:52 Sha Jiang
我以前也考虑过同样的问题。
但我这个人比较懒,就直接把这个文件放在webapp/WEB-INF目录中 ^_^
那么制作war文件后,它自然就会在正确的位置了。

应该可以使用maven-assembly-plugin达到相同的目的。
http://maven.apache.org/plugins/maven-assembly-plugin/  回复  更多评论
  

# re: Maven Weed 2007-01-16 17:18 fy
请教个问题,我用的是:eclipse:3.2.1,maven:2.0.4,org.maven.ide.eclipse:0.0.9.但是在eclipse中执行compile总是错:
INFO] ----------------------------------------------------------------------------
[INFO] Building maven_itms Maven Webapp
[INFO] task-segment: [compile]
[INFO] ----------------------------------------------------------------------------
[INFO] resources:resources
[INFO] Using default encoding to copy filtered resources.
[INFO] compiler:compile
Compiling 132 source files to D:\workspace\maven_itms\target\classes
[ERROR] mojo-execute : compiler:compile
Diagnosis: Compilation failure
FATAL ERROR: Error executing Maven for a project
[ERROR] project-execute : com.novitech.itms:maven_itms:war:1.0 ( task-segment: [compile] )
Diagnosis: Compilation failure
FATAL ERROR: Error executing Maven for a project
org.apache.maven.BuildFailureException: Compilation failure
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:555)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
at org.apache.maven.embedder.MavenEmbedder.execute(MavenEmbedder.java:441)
at org.apache.maven.embedder.MavenEmbedder.execute(MavenEmbedder.java:382)
at org.maven.ide.eclipse.Maven2Executor.main(Maven2Executor.java:68)
Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure
at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:505)
at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:111)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:412)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
... 8 more


但是在cmd中就不会错:D:\workspace\maven_itms>mvn compile
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Building maven_itms Maven Webapp
[INFO] task-segment: [compile]
[INFO] ----------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
Compiling 132 source files to D:\workspace\maven_itms\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8 seconds
[INFO] Finished at: Tue Jan 16 17:16:34 CST 2007
[INFO] Final Memory: 4M/16M
[INFO] ------------------------------------------------------------------------

不知道该怎么办?
  回复  更多评论
  

# re: Maven Weed 2007-01-17 10:18 Sha Jiang
关于你所提到的问题,我并没遇到过。
实际上,我没使用Maven的Eclipse插件。
如果你在CMD中执行命令mvn compile,没有出现问题。那么就可能是Eclipse环境的问题。
[1]使用什么版本的JDK
[2]Eclipse与CMD使用的JRE是否相同?
[3]在Eclipse中编译Java源文件,是否没有任何问题?设置了何种编译器级别?

如果没有上述问题,你就不要使用Maven的Eclipse插件。
而是将mvn命令直接配置为Eclipse的一个外部工具,然后使用该外部工具执行命令mvn compile。
再看看还会出现什么情况。  回复  更多评论
  

# re: Maven Weed 2007-01-17 11:28 fy
我把maven设置成了外部工具,问题解决.谢谢!  回复  更多评论
  

# re: Maven Weed 2007-01-17 12:47 Sha Jiang
那就可能是这个Maven的Eclipse插件的问题了(至少可能是与你使用的Eclipse版本不兼容)。
刚学习Maven时,也用过这个插件。但当时一方面对Maven不熟悉,一方面这个插件在Eclipse不能正常使用。
后来就一直没有再使用过任何一款Maven的Eclipse插件了。
对于只是运行Maven命令而言,把mvn设置为Eclipse外部命令,应该是足够用了。  回复  更多评论
  

# re: Maven Weed 2007-01-18 09:58 fy
Hello!
请问,你知道maven在产生site的时候,能做成中文的吗?我找了好久都没看到有人提到这件事。  回复  更多评论
  

# re: Maven Weed 2007-01-18 10:37 Sha Jiang
这个问题我也没考虑过。
不过可以想像,Maven默认使用英文。而要生成中文页面,肯定要把这些英文全部使用中文替换吧。
做国际化的时候,不是经常使用多语言的资源文件嘛。
但Maven可能没提供这方面的接口 :(  回复  更多评论
  

# re: Maven Weed 2007-04-20 14:53 Joeaniu
maven调试的一个小tip: 不要一次定义过多的内容,从最简单的pom.xml开始,一小块一小块的添加,以便定位问题。  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-19 16:52 新手
Tests run: 128, Failures:[color="#FF0000"] 2, Errors[/color]: 0, Skipped: 0

[color="#FF0000"][ERROR] mojo-execute : surefire:test[/color]
Diagnosis: There are test failures.
[color="#FF0000"]FATAL ERROR: Error executing Maven for a project[/color]
[color="#FF0000"][ERROR] project-execute : L2Emu:l2j-gameserver:jar:1.0.0 ( task-segment: [assembly:assembly] (aggregator-style) )[/color]
Diagnosis: There are test failures.
[color="#FF0000"]FATAL ERROR: Error executing Maven for a project[/color]
[color="#FF0000"][ERROR] reactor-execute : F:\L2jserver\L2Emu_GameServer[/color]
Diagnosis: There are test failures.
[color="#FF0000"]FATAL ERROR: Error executing Maven for a project[/color]
[INFO] ------------------------------------------------------------------------
[color="#FF0000"][ERROR] BUILD ERROR[/color]
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 52 seconds
[INFO] Finished at: Wed Dec 19 08:08:25 GMT 2007
[INFO] Final Memory: 9M/22M
[INFO] ------------------------------------------------------------------------
[color="#FF0000"][INFO] Error for project: Unnamed - L2Emu:l2j-gameserver:jar:1.0.0 (during org.apache.maven.plugins:maven-surefire-plugin:2.3:test)[/color]
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[ERROR] reactor-execute : F:\L2jserver\GameServer
[color="#FF0000"]FATAL ERROR: Error executing Maven for a project[/color]
[color="#FF0000"][INFO] BUILD ERRORS[/color]
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 52 seconds
[INFO] Finished at: Wed Dec 19 08:08:25 GMT 2007
[INFO] Final Memory: 9M/22M
[INFO] ------------------------------------------------------------------------

我要升成jar的包.但老是出错..
以前能用的.都没动过什么东西.
.就这两天用不了
Eclipse 我不太懂.问下这个是哪出错了..要如何解决


  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-19 16:55 新手
[ERROR] mojo-execute : surefire:test
Diagnosis: There are test failures.
FATAL ERROR: Error executing Maven for a project
[ERROR] project-execute : L2Emu:l2j-gameserver:jar:1.0.0 ( task-segment: [assembly:assembly] (aggregator-style) )
Diagnosis: There are test failures.
FATAL ERROR: Error executing Maven for a project
[ERROR] reactor-execute : F:\L2jserver\L2Emu_GameServer_CT1
Diagnosis: There are test failures.
FATAL ERROR: Error executing Maven for a project
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 52 seconds
[INFO] Finished at: Wed Dec 19 08:08:25 GMT 2007
[INFO] Final Memory: 9M/22M
[INFO] ------------------------------------------------------------------------
[INFO] Error for project: Unnamed - L2Emu:l2j-gameserver:jar:1.0.0 (during org.apache.maven.plugins:maven-surefire-plugin:2.3:test)
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[ERROR] reactor-execute : F:\L2jserver\L2Emu_GameServer_CT1
FATAL ERROR: Error executing Maven for a project
[INFO] BUILD ERRORS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 52 seconds
[INFO] Finished at: Wed Dec 19 08:08:25 GMT 2007
[INFO] Final Memory: 9M/22M
[INFO] ------------------------------------------------------------------------


我要升成jar的包.但老是出错..
以前能用的.都没动过什么东西.
.就这两天用不了
Eclipse 我不太懂.问下这个是哪出错了..要如何解决   回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-19 16:56 新手
还要能关掉Maven的test 功能吗.如果能的话.关掉后升成的jar能不能用呢  回复  更多评论
  

# re: Maven Weed 2007-12-19 21:26 Sha Jiang
> 还要能关掉Maven的test 功能吗
没问题,完全可以不执行test,在执行的命令中加上属性,-Dmaven.test.skip=true,即可。

> 如果能的话.关掉后升成的jar能不能用呢
生成artifate与是否执行test无关,所以可以放心使用。  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-19 21:29 新手
但是我用的是pom.xml......我要如何改呢...命令部分不我不太会  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-19 21:30 新手
还有上面那人是什错.能告诉我 如何解决吗.  回复  更多评论
  

# re: Maven Weed 2007-12-20 09:24 Sha Jiang
> 但是我用的是pom.xml......我要如何改呢...命令部分不我不太会
pom.xml肯定是要的,但你是如何执行mvn命令的?是使用Maven的Eclipse插件?
使用Maven,就是针对指定的pom.xml文件执行mvn命令;就如使用Ant,就是针对指定的build.xml文件执行ant命令。
针对你的pom.xml文件,试试命令mvn -Dmaven.test.skip=true package
  回复  更多评论
  

# re: Maven Weed 2007-12-20 09:33 Sha Jiang
> 还有上面那人是什错.能告诉我 如何解决吗.
应该是你的测试程序本身有问题,导致了test失败。
你先不做test,看看能不能执行成功。然后再只执行test,再分析会是什么问题。  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-20 15:49 新手
我是用Eclipse的Maven插件直接执行pom.xml文件的.所以命令要怎么打.打在哪我不知道..你教下吗.

你能加我QQ吗125789067 远程帮我看下..都几天了.还没搞好.我对Eclipse和Maven都不是很熟悉.操作不来.

pom.xml是别人编好的.以后我运行就能自动生成jar.但最近几天不知道出什么问题.生成时一直接提示有错.......但程序本身没问题.我问过制作程序的人.生成部份应该没办法.暂时除了我之外.还没有人反应升成不起来...  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-20 15:51 新手
Tests run: 128, Failures: 2, Errors: 0, Skipped: 0

[ERROR] mojo-execute : surefire:test
Diagnosis: There are test failures.
FATAL ERROR: Error executing Maven for a project
[ERROR] project-execute : L2Emu:l2j-gameserver:jar:1.0.0 ( task-segment: [assembly:assembly] (aggregator-style) )
Diagnosis: There are test failures.
FATAL ERROR: Error executing Maven for a project
[ERROR] reactor-execute : F:\L2jserver\L2Emu_GameServer
Diagnosis: There are test failures.
FATAL ERROR: Error executing Maven for a project


提示有两个错.但就是不知道是哪错了.东西太多.看不到哪出错  回复  更多评论
  

# re: Maven Weed 2007-12-20 17:15 Sha Jiang
> 我是用Eclipse的Maven插件直接执行pom.xml文件的.所以命令要怎么打.
> 打在哪我不知道..你教下吗.
我没有使用Maven的Eclipse插件。
但你能否先用命令去执行一下?先不管什么Eclipse插件了。

> 你能加我QQ吗125789067 远程帮我看下
我一般不用QQ,特别是在上班时。
如果可以的话,加我的MSN:jiangshachina@hotmail.com  回复  更多评论
  

# re: Maven Weed 2007-12-20 17:17 Sha Jiang
> L2Emu:l2j-gameserver:jar:1.0.0
这是你们的工程的artifact吗?
从上述信息中,看不出来原因。  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-21 11:15 新手
Tests run: 2, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.14 sec <<< FAILURE!
testCreationWithStatSet

---(net.sf.l2j.gameserver.templates.TestL2NpcTemplate) Time elapsed: 0.094 sec <<< FAILURE!
junit.framework.AssertionFailedError: expected:<UNKNOWN> but was:<null>
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.failNotEquals(Assert.java:282)
at junit.framework.Assert.assertEquals(Assert.java:64)
at junit.framework.Assert.assertEquals(Assert.java:71)
at net.sf.l2j.gameserver.templates.TestL2NpcTemplate.testCreationWithStatSet(TestL2NpcTemplate.java:91)
at net.sf.l2j.gameserver.templates.TestL2NpcTemplate.testCreationWithStatSet(TestL2NpcTemplate.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:138)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:163)
at org.apache.maven.surefire.Surefire.run(Surefire.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:244)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:814)

出错的好像是这里....不过我看不懂.帮我看下..MSN我不会用.郁闷  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-21 11:16 新手
testCreationWithDefaultValueForSomeStats(net.sf.l2j.gameserver.templates.TestL2NpcTemplate) Time elapsed: 0 sec <<< FAILURE!
junit.framework.AssertionFailedError: expected:<UNKNOWN> but was:<null>
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.failNotEquals(Assert.java:282)
at junit.framework.Assert.assertEquals(Assert.java:64)
at junit.framework.Assert.assertEquals(Assert.java:71)
at net.sf.l2j.gameserver.templates.TestL2NpcTemplate.testCreationWithDefaultValueForSomeStats(TestL2NpcTemplate.java:154)
at net.sf.l2j.gameserver.templates.TestL2NpcTemplate.testCreationWithDefaultValueForSomeStats(TestL2NpcTemplate.java:154)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:138)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:163)
at org.apache.maven.surefire.Surefire.run(Surefire.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:244)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:814)


还有这里.两个错误..  回复  更多评论
  

# re: Maven Weed 2007-12-21 12:30 Sha Jiang
没有成功地通过单元测试,可能是应用程序不对,也可能是测试程序有问题。
这些都是JUnit的问题,与Maven无关。  回复  更多评论
  

# re: Maven Weed[未登录] 2007-12-21 12:56 新手
无关的话 那要如何解决呢.

或者pom.xml这种文件.能用别的软件生成jar吗.  回复  更多评论
  

# re: Maven Weed 2007-12-21 14:20 Sha Jiang
> 或者pom.xml这种文件.能用别的软件生成jar吗.
如果仍然使用pom.xml,那么就必须使用Maven。
但也可以使用其它的build工具,如Ant,制作jar文件。

其实,根据你的情况,可能只是在执行build的过程未能通过单元测试罢了,你不执行这个测试,看能不能完成build工作,并制作出jar文件。
其实,我前面已经说了几次,请你先跳过test这一步,看看执行mvn命令有能否成功。
整个命令(mvn -Dmaven.test.skip=true package)也都给你了。你能否尝试一下呢?!  回复  更多评论
  

# re: Maven Weed(原) 2008-11-11 09:48 李睿凡
楼主你好,拜读大作.
小弟使用maven2.0.9,搭建了一个struts basic项目
使用mvn jetty:run-war能正常的跑起来 ,把war包扔到tomcat6.0.14上也能正常运行.

而使用mvn tomcat:run-war就跑不起来 ,报异常说引用了多个版本的logging.log .
使用这条命令(mvn tomcat:run-war)的时候,发现其使用的是tomcat5.5.15.

请问怎么解决这个问题?
另外,怎么指定让maven用tomcat6运行?
能让它用我指定版本的tomcat运行,这应该是很需要的.

谢谢!
我的QQ:315920958  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: