maven问题记录

1)maven大大简化了classpath的配置,使得任何java工程的classpath文件都是一样的。

更正:profile对eclipse project起作用 但必须是默认的。

<activation>
    <activeByDefault>true</activeByDefault>
   </activation>

这样不用maven命令就能使用mavne依赖,比如testng使用maven依赖,把testng环境依赖的jar都放到classpath,而真正发布时不应该把这些testng依赖的jar发布,这时发布时使用 dev profile就不会发布测试环境依赖的jar

  <profile>
   <id>unitest</id>
   <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
   <dependencies>
    <dependency>
     <groupId>org.iata</groupId>
     <artifactId>ios-test</artifactId>
    </dependency>
   </dependencies>
  </profile>

<!-- 发布环境不依赖测试环境-->
   <profile>
   <id>dev</id>
  </profile>

2)版本控制:高版本覆盖低版本。maven会传递依赖,两个不相关的jar都传递依赖了同一个jar,但可能依赖jar的版本不同,这时高版本会覆盖低版本。

3)过滤依赖:由版本控制引入的高版本覆盖低版本,导致使用低版本的jar被迫使用依赖的高版本jar,这可能使用低版本依赖的jar不能正常运行,如果高版本jar运行时不会使用,就可以通过exclusions过滤掉高版本jar。

示例 jpa hibernate实现 3.3.2.ga使用高版本的javasist,而seam使用的是低版本的javasist,这样导致seam也被迫使用高版本的javasist而出现错误。

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-entitymanager</artifactId>
   <version>3.3.2.GA</version>
   <type>jar</type>
   <scope>compile</scope>
   <exclusions>
    <exclusion>
     <artifactId>javassist</artifactId>
     <groupId>javassist</groupId>
    </exclusion>
   </exclusions>
  </dependency>

4)provided不会将jar加入到classpath中

5)文件替换(不是文件内容中变量替换),同时支持maven和非maven环境

将文件 A

resources/config/config.xml

用文件 B

resources/testconfig/config.xml

替换,A中不带变量,这样可以在非maven使用,B中带变量,必须使用maven变量替换,要同时支持两种都能使用,那么得将maven替换后的B文件覆盖A文件。通过resource的targetPath属性实现,targetPath用来指定文件放到那里,下面示例中的<targetPath>config</targetPath>会将testconfig\config.xml文件放到classes\config下面,targetPath中指定的是相对于输出根的目录。

        <profile>
            <id>gaoduan</id>
            <properties>
                <jdbc.url>jdbc:mysql://192.168.23.48:3306/oel_gaoduan_online?characterEncoding=UTF8</jdbc.url>
                <redis.ip>192.168.20.186</redis.ip>
                <redis.port>6385</redis.port>
            </properties>
            <build>
                <resources>
                    <resource>
                        <directory>src/main/resources</directory>
                        <excludes>
                            <exclude>config.xml</exclude>
                        </excludes>
                    </resource>

                    <resource>
                        <directory>src/main/resources/testconfig</directory>
                        <includes>
                            <include>config.xml</include>
                        </includes>
                        <filtering>true</filtering>
                        <targetPath>config</targetPath>
                    </resource>
                </resources>

6) 2014-7-23 jar项目中java目录下面的非java文件不会被打包到jar中,将非java文件安装对应的目录建在resources下面即可

7)freemarker资源替换问题

http://blog.csdn.net/huyouheng/article/details/7285532

猜你喜欢

转载自yourenyouyu2008.iteye.com/blog/1308341