不使用maven仓库中jar包,并在发布时将其打进war包里

在maven项目下建立一个lib文件夹,把需要用到的jar包都放到里面去。然后在pom.xml里添加如下的内容:

 

[html] view plain copy

  1. <dependency>  
  2.  <groupId>com.weiresearchgroupId>   
  3.  <artifactId>webharvestartifactId>   
  4.  <version>1.0.0version>    
  5.  <scope>systemscope>    
  6.  <systemPath>${project.basedir}/lib/webharvest.jarsystemPath>    
  7. dependency>  

 

这里的groupId,artifactId,version都可以随便写。然后scope要写成system,systemPath就写为要引用的jar包路径。这里不知道能否批量导入,没测试过,不过貌似不可以。

但是,还有个麻烦问题,我把我的项目打包成war包的时候,它居然只有我写的代码,而不包括引用的jar包。这就很麻烦了,打包的war包就不能直接使用了。找来好久,终于找到原因了。首先是其他正常使用maven的包,如下:

[html] view plain copy

  1. <dependency>    
  2.   
  3. <groupId>javax.servletgroupId>    
  4. <artifactId>servlet-apiartifactId>    
  5. <version>2.5version>   
  6. <scope>providedscope>   
  7.  dependency>  

 

这里引用的是servlet包,最重要的是scope这个字段,provided的意思,就是说这个jar包,在这个项目可能的运行环境里,都会提 供了的,所以就不用打包到war包里面了。因此,要使得war包里面包含servlet这个包,只要把scope这句给删除掉就可以了。

 

而上面利用system这个scope引入的webharvest包,同样也没有引入进去。看了下网上的评论,才说最好不要用system这个 scope。大概是说这个system指的是JDK里面会包含这个jar包吧。这个解决方法就麻烦人了,最后是看到了这个问答才解决了的:Maven 2 assembly with dependencies: jar under scope “system” not included ,解决方法如下:

[html] view plain copy

  1. <plugin>    
  2. <groupId>org.apache.maven.pluginsgroupId>   
  3.  <artifactId>maven-war-pluginartifactId>   
  4.  <configuration>     
  5. <webResources>     
  6. <resource>     
  7. <directory>${project.basedir}/libdirectory>   
  8.  <targetPath>WEB-INF/libtargetPath>  
  9.  <filtering>falsefiltering>    
  10.  <includes>    
  11. <include>**/*.jarinclude>   
  12.  includes> resource>  
  13.  webResources>   
  14.  configuration>   
  15.   plugin>  

directory字段指向的是包含你所有要用jar包的目录

targetPath则是编译后要把这些jar包复制到的位置

下面的filtering就是只导入所有以jar为后缀的文件

通过上面的设置,就能把你要的jar包导入进去了

 

转载:http://blog.csdn.net/l1028386804/article/details/52594602

你可能感兴趣的:(java)