去除[WARNING] Using platform encoding (UTF-8 actually) to copy filter
在POM文件的顶级目录中,加入下面的配置。其实就是设置一下工程的编码格式
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
[maven3 warning] ‘dependencies.dependency.systemPath’ should not point at files within the project directory
systemPath被设计用来讲一些系统库包含进来,它们往往具有固定的路径。当在自己的project中使用这个特性但是指定相对路径如${basedir}/src/lib之类的,就会提示这个。解决方法如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-install-pluginartifactId>
<version>2.5.2version>
plugin>
plugins>
build>
然后执行下面的命令即可将第三方包安装到本地仓库中(注意,这里的groupId,artifactId要和上面的依赖中所写的一致,另外,-D选项和后面的参数之间不能有空格):
mvn install:install-file -Dfile=src/lib/spark-liblinear-1.95.jar -DgroupId=tw.edu.ntu.csie -DartifactId=liblinear -Dversion=1.95 -Dpackaging=jar
如果是要部署到自己公司的私有仓库中,可以使用下面的命令(没具体试验过):
mvn deploy:deploy-file -DgroupId=com.bea.xml -DartifactId=jsr173-ri -Dversion=1.0 -Dpackaging=jar -Dfile=[path to file] -Durl=[url] -DrepositoryId=[id]
将项目所有依赖的jar全部打包进最终的项目jar包中
直接使用maven自带的插件进行打包的话,项目依赖的jar不会被打包进最终的项目jar包中,同时,生成的jar包中的META-INF/MENIFEST.MF文件中,也没有指定主类,这样的包无法直接运行的。为了解决这个问题,可以使用maven-shade-plugin插件。在项目POM文件中,添加下面的配置代码(我工程的主类是my.maven.learn.App):
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-shade-pluginartifactId>
<version>2.3version>
<executions>
<execution>
<phase>packagephase>
<goals>
<goal>shadegoal>
goals>
<configuration>
<filters>
<filter>
<artifact>*:*artifact>
<excludes>
<exclude>META-INF/*.SFexclude>
<exclude>META-INF/*.DSAexclude>
<exclude>META-INF/*.RSAexclude>
excludes>
filter>
filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>my.maven.learn.AppmainClass>
transformer>
transformers>
configuration>
execution>
executions>
plugin>
之后执行mvn package 就会将所以依赖全部打包进jar包中,同时还会根据配置来自动设置主类。注意上面的filter代码段,shade在打包时,默认会将一些无用的文件加入到META-INF中,如果不将这些文件排除出去,则最终得到的jar包是无效的,无法执行。
[WARNING] Expected all dependencies to require Scala version: 2.10.4
我使用的是net.alchim31.maven:scala-maven-plugin插件, 配置文件中添加如下代码(其中scala.version设置为2.10.4, scala.binary.version设置为2.10):
<plugin>
<groupId>net.alchim31.mavengroupId>
<artifactId>scala-maven-pluginartifactId>
<version>3.1.6version>
<configuration>
<scalaCompatVersion>${scala.binary.version}scalaCompatVersion>
<scalaVersion>${scala.version}scalaVersion>
configuration>
<executions>
<execution>
<phase>compilephase>
<goals>
<goal>compilegoal>
<goal>testCompilegoal>
goals>
execution>
executions>
plugin>
src/main/resources 中资源文件的访问方法:
maven在compile阶段,会将src/main/resources中的资源文件复制到target/classes目录下,因而如果要在代码中访问resources目录中的资源文件,只需要一下代码即可(此处假设需要访问的文件为src/main/resources/tt.txt):
getClass.getResource("/tt.txt");