- 浏览: 568145 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (267)
- 随笔 (4)
- Spring (13)
- Java (61)
- HTTP (3)
- Windows (1)
- CI(Continuous Integration) (3)
- Dozer (1)
- Apache (11)
- DB (7)
- Architecture (41)
- Design Patterns (11)
- Test (5)
- Agile (1)
- ORM (3)
- PMP (2)
- ESB (2)
- Maven (5)
- IDE (1)
- Camel (1)
- Webservice (3)
- MySQL (6)
- CentOS (14)
- Linux (19)
- BI (3)
- RPC (2)
- Cluster (9)
- NoSQL (7)
- Oracle (25)
- Loadbalance (7)
- Web (5)
- tomcat (1)
- freemarker (1)
- 制造 (0)
最新评论
-
panamera:
如果设置了连接需要密码,Dynamic Broker-Clus ...
ActiveMQ 集群配置 -
panamera:
请问你的最后一种模式Broker-C节点是不是应该也要修改持久 ...
ActiveMQ 集群配置 -
maosheng:
longshao_feng 写道楼主使用 文件共享 模式的ma ...
ActiveMQ 集群配置 -
longshao_feng:
楼主使用 文件共享 模式的master-slave,produ ...
ActiveMQ 集群配置 -
tanglanwen:
感触很深,必定谨记!
少走弯路的十条忠告
项目坐标:
<groupId>com.alibaba</groupId>
<artifactId>dubbo-parent</artifactId>
<version>2.5.4-SNAPSHOT</version>
<packaging>jar</packaging>
项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部
分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同
时有一个拥有同样的groupId, artifactId和version标识的项目。
项目依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.4_spec</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
依赖范围三种:compile,test,和provided
compile(编译范围):compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
test(测试范围):test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
provided(已提供范围):provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
排除并替换一个传递性依赖:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.5.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.1_spec</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
【编译插件】
<build>
//默认测试源码目录和测试编译输出目录的位置,默认不用设置
<testSourceDirectory>src/test/java</testSourceDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
//默认源码目录和编译输出目录的位置,默认不用设置
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>target/classes</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
<compilerVersion>1.5</compilerVersion>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
Java源代码遵循Java 1.5,目标为Java 1.5 JVM
【忽略单元测试失败】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
插件参数表达式:
mvn test -Dmaven.test.failure.ignore=true
【跳过单元测试】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
插件参数表达式:
mvn install -Dmaven.test.skip=true
【打包war项目】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<excludes>
<exclude>**/*.jpg</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
【生成可执行jar】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.hainiubl.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
可以让用户配置Main-Class的值,然后在打包的时候将值填入/META-INF/MANIFEST.MF文件。关于项目的依赖,它将依赖JAR文件全部解压后,再将得到的.class文件连同当前项目.class文件一起合并到最终的jar包。 可以通过java -jar app.jar 直接执行jar包
【制作项目分发包】
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assemble/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
assembly.xml 文件:
<assembly 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/assembly-1.0.0.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/conf</directory>
<outputDirectory>conf</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的。
使用一个名为assembly.xml的元数据文件来表述打包,它的single目标可以直接在命令行调用,也可以被绑定至生命周期。
【运行任何本地的系统程序】
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.hainiubl.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
它能让你运行任何本地的系统程序,就是使用 mvn exec:exec。除了exec目标之外,exec-maven-plugin还提供了一个java目标,该目标要求你提供一个mainClass参数,然后它能够利用当前项目的依赖作为classpath,在同一个JVM中运行该mainClass。你可以在POM中配置好exec-maven-plugin的相关运行参数,然后直接在命令运行 mvn exec:java 以查看运行效果。
【生成javadoc】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
【生成项目源码包】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Maven默认生命周期阶段:
1.validate :验证项目是否正确,以及所有为了完整构建必要的信息是否可用
2.generate-sources :生成所有需要包含在编译过程中的源代码
3.process-sources :处理源代码,比如过滤一些值
4.generate-resources :生成所有需要包含在打包过程中的资源文件
5.process-resources :复制并处理资源文件至目标目录,准备打包
6.compile :编译项目的源代码
7.process-classes :后处理编译生成的文件,例如对Java类进行字节码增强
8.generate-test-sources :生成所有包含在测试编译过程中的测试源码
9.process-test-sources :处理测试源码,比如过滤一些值
10.generate-test-resources :生成测试需要的资源文件
11.process-test-resources :复制并处理测试资源文件至测试目标目录
12.test-compile :编译测试源码至测试目标目录
13.test :使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
14.prepare-package :在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本
15.package :将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
16.pre-integration-test :执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
17.integration-test :如果有必要的话,处理包并发布至集成测试可以运行的环境
18.post-integration-test :执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
19.verify :执行所有检查,验证包是有效的,符合质量规范
20.install 安装包至本地仓库,以备本地的其它项目作为依赖使用
21.deploy 复制最终的包至远程仓库,共享给其它开发人员和项目
打包类型相关生命周期:
1.JAR打包类型:JAR是默认的打包类型
生命周期阶段 目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy
2.POM打包类型:
生命周期阶段 目标
package site:attach-descriptor
install install:install
deploy deploy:deploy
3.WAR打包类型:
生命周期阶段 目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package war:war
install install:install
deploy deploy:deploy
4.EAR打包类型:
生命周期阶段 目标
generate-resources ear:generate-application-xml
process-resources resources:resources
package ear:ear
install install:install
deploy deploy:deploy
Maven属性
事实上有六种类型的Maven属性:
•1.内置属性:主要有两个常用内置属性——${basedir}表示项目根目录,即包含pom.xml文件的目录;${version}表示项目版本。
•2.POM属性:pom中对应元素的值。例如${project.artifactId}对应了<project><artifactId>元素的值,常用的POM属性包括:
${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/.
${project.build.testSourceDirectory}:项目的测试源码目录,默认为/src/test/java/.
${project.build.directory}:项目构建输出目录,默认为target/.
${project.build.outputDirectory}:项目主代码编译输出目录,默认为target/classes/.
${project.build.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/.
${project.groupId}:项目的groupId.
${project.artifactId}:项目的artifactId.
${project.version}:项目的version,于${version}等价
${project.build.finalName}:项目打包输出文件的名称,默认为
${project.artifactId}${project.version}.
•3.自定义属性:在pom中<properties>元素下自定义的Maven属性。例如
• <project>
• <properties>
• <my.prop>hello</my.prop>
• </properties>
• </project>
•4.Settings属性:与POM属性同理。如${settings.localRepository}指向用户本地仓库的地址。
•5.Java系统属性:所有Java系统属性都可以使用Maven属性引用,例如${user.home}指向了用户目录。可以通过命令行mvn help:system查看所有的Java系统属性
•6.环境变量属性:所有环境变量都可以使用以env.开头的Maven属性引用。例如${env.JAVA_HOME}指代了JAVA_HOME环境变量的值。也可以通过命令行mvn help:system查看所有环境变量。
资源过滤
默认情况下,Maven属性只有在POM中才会被解析。资源过滤就是指让Maven属性在资源文件(src/main/resources、src/test/resources)中也能被解析。
在POM中添加下面的配置便可以开启资源过滤
• <build>
• <resources>
• <resource>
• <directory>${project.basedir}/src/main/resources</directory>
• <filtering>true</filtering>
• </resource>
• </resources>
• <testResources>
• <testResource>
• <directory>${project.basedir}/src/test/resources</directory>
• <filtering>true</filtering>
• </testResource>
• </testResources>
• </build>
从上面的配置中可以看出,我们其实可以配置多个主资源目录和多个测试资源目录。
Maven除了可以对主资源目录、测试资源目录过滤外,还能对Web项目的资源目录(如css、js目录)进行过滤。这时需要对maven-war-plugin插件进行配置
• <plugin>
• <groupId>org.apache.maven.plugins</groupId>
• <artifactId>maven-war-plugin</artifactId>
• <version>2.1-beta-1</version>
• <configuration>
• <webResources>
• <resource>
• <filtering>true</filtering>
• <directory>src/main/webapp</directory>
• <includes>
• <include>**/*.css</include>
• <include>**/*.js</include>
• </includes>
• </resource>
• </webResources>
• </configuration>
• </plugin>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-parent</artifactId>
<version>2.5.4-SNAPSHOT</version>
<packaging>jar</packaging>
项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部
分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同
时有一个拥有同样的groupId, artifactId和version标识的项目。
项目依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.4_spec</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
依赖范围三种:compile,test,和provided
compile(编译范围):compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
test(测试范围):test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
provided(已提供范围):provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
排除并替换一个传递性依赖:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.5.ga</version>
<exclusions>
<exclusion>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.1_spec</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
【编译插件】
<build>
//默认测试源码目录和测试编译输出目录的位置,默认不用设置
<testSourceDirectory>src/test/java</testSourceDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
//默认源码目录和编译输出目录的位置,默认不用设置
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>target/classes</outputDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
<compilerVersion>1.5</compilerVersion>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
Java源代码遵循Java 1.5,目标为Java 1.5 JVM
【忽略单元测试失败】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
插件参数表达式:
mvn test -Dmaven.test.failure.ignore=true
【跳过单元测试】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
插件参数表达式:
mvn install -Dmaven.test.skip=true
【打包war项目】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<excludes>
<exclude>**/*.jpg</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
【生成可执行jar】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.hainiubl.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
可以让用户配置Main-Class的值,然后在打包的时候将值填入/META-INF/MANIFEST.MF文件。关于项目的依赖,它将依赖JAR文件全部解压后,再将得到的.class文件连同当前项目.class文件一起合并到最终的jar包。 可以通过java -jar app.jar 直接执行jar包
【制作项目分发包】
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assemble/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
assembly.xml 文件:
<assembly 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/assembly-1.0.0.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/conf</directory>
<outputDirectory>conf</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等。支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的。
使用一个名为assembly.xml的元数据文件来表述打包,它的single目标可以直接在命令行调用,也可以被绑定至生命周期。
【运行任何本地的系统程序】
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.hainiubl.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
它能让你运行任何本地的系统程序,就是使用 mvn exec:exec。除了exec目标之外,exec-maven-plugin还提供了一个java目标,该目标要求你提供一个mainClass参数,然后它能够利用当前项目的依赖作为classpath,在同一个JVM中运行该mainClass。你可以在POM中配置好exec-maven-plugin的相关运行参数,然后直接在命令运行 mvn exec:java 以查看运行效果。
【生成javadoc】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
【生成项目源码包】
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Maven默认生命周期阶段:
1.validate :验证项目是否正确,以及所有为了完整构建必要的信息是否可用
2.generate-sources :生成所有需要包含在编译过程中的源代码
3.process-sources :处理源代码,比如过滤一些值
4.generate-resources :生成所有需要包含在打包过程中的资源文件
5.process-resources :复制并处理资源文件至目标目录,准备打包
6.compile :编译项目的源代码
7.process-classes :后处理编译生成的文件,例如对Java类进行字节码增强
8.generate-test-sources :生成所有包含在测试编译过程中的测试源码
9.process-test-sources :处理测试源码,比如过滤一些值
10.generate-test-resources :生成测试需要的资源文件
11.process-test-resources :复制并处理测试资源文件至测试目标目录
12.test-compile :编译测试源码至测试目标目录
13.test :使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
14.prepare-package :在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本
15.package :将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
16.pre-integration-test :执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
17.integration-test :如果有必要的话,处理包并发布至集成测试可以运行的环境
18.post-integration-test :执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
19.verify :执行所有检查,验证包是有效的,符合质量规范
20.install 安装包至本地仓库,以备本地的其它项目作为依赖使用
21.deploy 复制最终的包至远程仓库,共享给其它开发人员和项目
打包类型相关生命周期:
1.JAR打包类型:JAR是默认的打包类型
生命周期阶段 目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy
2.POM打包类型:
生命周期阶段 目标
package site:attach-descriptor
install install:install
deploy deploy:deploy
3.WAR打包类型:
生命周期阶段 目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package war:war
install install:install
deploy deploy:deploy
4.EAR打包类型:
生命周期阶段 目标
generate-resources ear:generate-application-xml
process-resources resources:resources
package ear:ear
install install:install
deploy deploy:deploy
Maven属性
事实上有六种类型的Maven属性:
•1.内置属性:主要有两个常用内置属性——${basedir}表示项目根目录,即包含pom.xml文件的目录;${version}表示项目版本。
•2.POM属性:pom中对应元素的值。例如${project.artifactId}对应了<project><artifactId>元素的值,常用的POM属性包括:
${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/.
${project.build.testSourceDirectory}:项目的测试源码目录,默认为/src/test/java/.
${project.build.directory}:项目构建输出目录,默认为target/.
${project.build.outputDirectory}:项目主代码编译输出目录,默认为target/classes/.
${project.build.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/.
${project.groupId}:项目的groupId.
${project.artifactId}:项目的artifactId.
${project.version}:项目的version,于${version}等价
${project.build.finalName}:项目打包输出文件的名称,默认为
${project.artifactId}${project.version}.
•3.自定义属性:在pom中<properties>元素下自定义的Maven属性。例如
• <project>
• <properties>
• <my.prop>hello</my.prop>
• </properties>
• </project>
•4.Settings属性:与POM属性同理。如${settings.localRepository}指向用户本地仓库的地址。
•5.Java系统属性:所有Java系统属性都可以使用Maven属性引用,例如${user.home}指向了用户目录。可以通过命令行mvn help:system查看所有的Java系统属性
•6.环境变量属性:所有环境变量都可以使用以env.开头的Maven属性引用。例如${env.JAVA_HOME}指代了JAVA_HOME环境变量的值。也可以通过命令行mvn help:system查看所有环境变量。
资源过滤
默认情况下,Maven属性只有在POM中才会被解析。资源过滤就是指让Maven属性在资源文件(src/main/resources、src/test/resources)中也能被解析。
在POM中添加下面的配置便可以开启资源过滤
• <build>
• <resources>
• <resource>
• <directory>${project.basedir}/src/main/resources</directory>
• <filtering>true</filtering>
• </resource>
• </resources>
• <testResources>
• <testResource>
• <directory>${project.basedir}/src/test/resources</directory>
• <filtering>true</filtering>
• </testResource>
• </testResources>
• </build>
从上面的配置中可以看出,我们其实可以配置多个主资源目录和多个测试资源目录。
Maven除了可以对主资源目录、测试资源目录过滤外,还能对Web项目的资源目录(如css、js目录)进行过滤。这时需要对maven-war-plugin插件进行配置
• <plugin>
• <groupId>org.apache.maven.plugins</groupId>
• <artifactId>maven-war-plugin</artifactId>
• <version>2.1-beta-1</version>
• <configuration>
• <webResources>
• <resource>
• <filtering>true</filtering>
• <directory>src/main/webapp</directory>
• <includes>
• <include>**/*.css</include>
• <include>**/*.js</include>
• </includes>
• </resource>
• </webResources>
• </configuration>
• </plugin>
发表评论
-
Maven仓库中添加Oracle JDBC驱动
2014-01-09 09:35 3582由于Oracle授权问题,Maven不提供Oracle JDB ... -
Maven web项目内嵌测试
2013-12-27 15:54 9761,maven pom配置 在当前项目的pom.xml文件 ... -
Maven部署项目到tomcat 6和tomcat 7
2013-12-27 15:10 117261,tomcat 配置 打开tomcat的安装目录的 con ... -
Maven 命令汇总
2013-09-11 15:34 1178mvn -version :查看 Maven 版本 mvn ...
相关推荐
"点滴读在线读书系统"是一个综合性的项目,主要利用Java技术栈和SpringBoot框架构建,同时结合Maven作为项目管理工具,以及微信小程序作为前端应用。这个系统旨在为用户提供便捷的在线阅读体验,可能包括书籍搜索、...
读者可以从中了解到Servlet、JSP、Spring框架、MyBatis等技术的应用,还有Maven、Gradle等构建工具的使用心得。此外,对于并发编程、线程安全、性能优化等高级话题,作者也可能有所涉及,这些都是Java程序员在实际...
在SVN中,可以使用Maven管理项目的版本控制和发布流程。 8. 发布流程:工具型项目需要在Maven仓库中发布jar包,而工程型项目则通过简单的部署即可。当测试通过后,正式版本应该从tags目录中发布,而开发版本则保留...
7. `pom.xml`(如果使用Maven)或`build.gradle`(如果使用Gradle):项目构建配置文件,用于定义依赖管理和构建过程。 总的来说,"Simple-diary-app"是一个使用Java语言开发的在建日记应用。它提供了基本的日记...
最后,书中可能还会讨论到持续集成和自动化测试的重要性,如使用Maven进行项目管理和构建,使用JUnit进行单元测试,这些是现代软件开发流程中的关键步骤,确保代码质量和项目进度。 总之,《Java夜未眠:程序员的...
maven依赖 version1.0 开发点滴 类构造函数特殊性造成该类对象protostuff反序列化问题 已修复。 添加lambda表达式练习代码 为了写redis操作的代码。 函数接口是个泛型接口,lambda怎么写。 redis 应用 添加, 删除...
- 开箱即用:提供了一系列的starter依赖来简化Maven配置。 2. **Spring MVC(SM)** - **简介**:Spring MVC是Spring Framework的一个模块,用于构建Web应用程序。 - **特点**: - 请求处理:通过@Controller...
这里的"谷粒"一词可能是象征性地表示微小而丰富的元素,寓意该平台提供了关于商城开发的点滴知识和实践积累。在描述中提到的“资料源码”意味着我们可以在这个平台上找到实际的编程代码,这对于开发者来说是极其宝贵...
java爬虫,国家统计局区划编码http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/; 爬取省市区乡镇村数据,共70W+数据.
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind <version>2.x.x ``` 请注意替换`2.x.x`为最新的稳定版本号。 ...
在数字化时代,我们常常寻找一种便捷的方式来记录生活中的点滴,而“Personal-Diary”就是这样一个基于Java开发的个人日记应用。这款应用以其简洁的界面和高效的实用性,为用户提供了方便的日记记录体验。本文将深入...
随着互联网技术的不断发展,越来越多的人希望通过建立个人博客网站来展示自己,分享生活和工作中的点滴。本文旨在介绍如何利用SSM框架(Spring、SpringMVC、MyBatis)和MySQL数据库设计并实现一个功能完善的个人博客...
8. **持续集成与部署**:SSM项目通常会配合Maven或Gradle进行构建,并使用Tomcat或Jetty等服务器进行部署。通过Jenkins等工具进行持续集成,确保代码质量和版本控制。 9. **最佳实践**:在SSM框架的使用中,遵循...
在开发过程中,开发者可能使用了Maven或Gradle作为构建工具,利用Spring Boot框架构建后端服务,使用Thymeleaf或React等技术处理前端页面,而数据库可能采用MySQL或PostgreSQL,用JPA或Hibernate进行数据持久化。...
在构建过程中,Maven或Gradle会处理依赖管理和构建过程,最终生成可执行的JAR文件供用户使用。 总之,“我的日记客户端”是一个用Java技术构建的个人日记应用,具备多种实用功能,为用户提供了舒适的日记记录体验。...
描述中的“我的博客”意味着这是一个个人博客项目,可能是作者为了分享技术文章、个人见解或者生活点滴而创建的。它可能包含了用户注册、登录功能,文章发布、分类、评论等功能,并且具有个性化的界面设计。 【标签...
- 配置构建环境,如Java版本、Maven版本等。 - 定义构建步骤,通常使用Groovy脚本或选择已有的插件。 #### 四、案例分析 文档中的案例分析提供了一个具体的构建流程实例,可以帮助读者更好地理解如何在实践中应用...
4. **依赖管理**:使用Maven或Gradle来管理项目依赖和构建流程。 5. **安全框架**:如Spring Security或Apache Shiro,处理用户认证和授权。 6. **日志系统**:如Log4j或SLF4J,记录应用运行时的信息。 7. **测试...
为了使用ICEpdf-pro-4.3.3-src,开发者需要具备Java编程基础,熟悉Maven或Gradle构建工具,因为ICEpdf通常使用这些工具来编译和打包。解压"ICEpdf-pro-4.3.3-src.zip"后,可以查看README文件获取编译和配置指南,...
在这个应用中,用户可以相互添加为好友,进行实时的文字、语音甚至视频交流,分享生活点滴,增进彼此的联系。下面我们将详细探讨Java在构建此类应用程序中的关键知识点。 首先,Java作为ECUBuddyChat的核心编程语言...