命令
源码编译
mvn compile
编译测试代码
mvn test-compile
编译源码和测试源码进行测试
mvn test
项目打包
mvn package
在项目所在的目录执行指令mvn package可以进行项目打包,打包方式是在项目根目录下的pom.xml文件中的packaging元素定义的,如果定义为jar则打为jar包,如果是war则打为war包,如果是ear则为ear包。如果pom.xml中没有定义packaging元素,则会使用默认值jar。打包后的文件将会放在项目根目录下的target目录下。
打包后的文件名将是在pom.xml文件中定义的artifactId-version的形式,比如在pom.xml中定义的artifactId是hello,定义的version是1.0,则打包后生成的文件的名称将是hello-1.0。
安装jar包到maven的本地仓库
mvn install
TODO
安装当前项目到远程仓库
mvn deploy
清除存放临时文件的target目录
mvn clean
打包资源
如果需要把一些资源文件也一并打包到jar包里面的话,需要在${basedir}/src/main下新建一个resources目录,然后把所有的资源文件都放到这个目录中,这样这些文件都会放到类路径下面。如果需要在测试代码中访问到对应的资源,那么相对的就需要在${basedir}/src/test下新建一个resources目录,然后把相应的资源文件放在这个目录下。
过滤资源文件
有的时候有些资源文件中的值我们需要在编译的时候动态的指定,maven允许我们在建立文件的时候以${property_name}的方式指定,这样当我们进行编译的时候就会自动的把property_name对应的值替换${property_name}。这个property可以是pom.xml中定义的值,也可以是settings.xml中定义的值,也可以是定义在外部属性文件中的值,还可以是系统属性。maven这种动态替换属性值的功能默认是关闭的,如果要打开的话需要在项目的pom.xml文件中指定filtering的值为true.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
使用pom.xml和settings.xml中的元素element作为属性
我们可以使用pom.xml文件中的element对应的值来作为属性值。在maven中,使用pom来表示pom.xml中的根元素project,所以我们可以使用${pom.name}来表示project元素下面的name元素,使用${pom.version}来表示project元素下面的version元素。有些元素在pom.xml文件中是没有明确定义的,但是那不代表它们不存在,这是因为它们有一个默认值,像这种元素我们也可以直接拿来使用。同样的我们需要使用settings.xml中的元素的时候可以使用settings前缀来关联,如${settings.localRepository}就是在settings.xml中定义的localRepository元素的值。
文件 application.properties
project_name=${pom.name}
project_version=${pom.version}
project_modelVersion=${pom.modelVersion}
project_artifactId=${pom.artifactId}
settings_localRepository=${settings.localRepository}
在resources目录下定义了上面文件之后,在命令行模式下进入pom.xml文件所在的那一级目录,也就是项目的根目录,
之后使用mvn compile进行编译,编译后可以到target/classes目录下找到对应的资源文件,打开可以看到如下内容:
project_name=mavenAppTest
project_version=1.0-SNAPSHOT
project_modelVersion=4.0.0
project_artifactId=mavenApp
settings_localRepository=D:\\develop\\mavenRepository
使用外部文件的属性关联
要使用外部文件的属性来关联资源文件里面定义的属性值,那么我们就需要告诉maven应该去哪里找这个属性文件,
这是通过在pom.xml中指定filter的值来指定的。
<build>
<filters>
<filter>src/main/filters/testFilter.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
在上面代码中我们通过build下面的filters下面的filter元素指定了一个外部用于资源文件过滤的属性文件src/main/filters/testFilter.properties,接着我们在src/main/filters下面建立testFilter.properties文件,
其内容如下:
myFilter.maven.test=test
myFilter.maven.username=andy
然后我们在resources目录下面定义一个application.properties文件,内容如下:
project_name=${pom.name}
project_version=${pom.version}
project_modelVersion=${pom.modelVersion}
project_artifactId=${pom.artifactId}
settings_localRepository=${settings.localRepository}
filter_username=${myFilter.maven.username}
接下来我们执行mvn process-resources指令来处理资源文件,将在target/classes下面对应的application.properties文件中看到如下内容:
project_name=mavenAppTest
project_version=1.0-SNAPSHOT
project_modelVersion=4.0.0
project_artifactId=mavenApp
settings_localRepository=D:\\develop\\mavenRepository
filter_username=andy