maven仓库、多环境

来源:互联网 发布:windows驱动开发视频 编辑:程序博客网 时间:2024/06/01 23:27

==============================================================================
maven 多环境打包配置
pom.xml文件配置:
<build>        <finalName>cacheCloud-clientTest</finalName>        <resources>        <resource>            <directory>${profile.dir}</directory><!--下面profiles/profile/properties的【profile.dir】值-->        </resource>        <resource>            <directory>src/main/resources</directory>            <filtering>true</filtering>        </resource>        </resources></build><profiles>    <profile>        <id>dev</id><!-- mvn package -Pdev -->        <properties>            <profile.dir>src/main/profiles/dev</profile.dir>        </properties>    </profile>    <profile>        <id>product</id>        <properties>            <profile.dir>src/main/profiles/product</profile.dir>        </properties>                </profile></profiles>
src/main目录下新建文件夹profiles,profiles文件夹里新建两个文件夹dev、product,
dev、product里面存放相应的.properties文件例如db.properties
*********************************************************************
filters配置及applicationContext.xml中读取properties文件值
1.<util:properties />

pom.xml中配置:
<resources>
    <resource>
        <directory>${profile.dir}</directory>
    </resource>
        <resource>
                <directory>src/main/resources</directory>
        </resource>
</resources>
applicationContext.xml中配置:
<util:properties id="dbproperties" location="classpath:db.properties"/>
<property name="username" value="#{dbproperties['db.username']}"/>

${db.username}读取不到,需用#{dbproperties['db.username']}这种方式
*********************************************************************
2.<context:property-placeholder />
pom.xml中配置:
<resources>
    <resource>
        <directory>${profile.dir}</directory>
    </resource>
        <resource>
                <directory>src/main/resources</directory>
        </resource>
</resources>
applicationContext.xml中配置:
<context:property-placeholder location="classpath:db.properties"/>
用${db.username}读取
*********************************************************************
3.<filters>
pom.xml中配置:
<resources>    
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>
<filters>
    <filter>${profile.dir}/db.properties</filter>
    <filter>${profile.dir}/cache.properties</filter>
</filters>

applicationContext.xml中配置:
直接用${db.username}读取,不用<util:properties />、<context:property-placeholder />引入.properties文件
==============================================================================
maven仓库

<<maven实战>>

1.中央仓库的url位置在如下目录中:

${MAVEAN_HOME}\lib\maven-model-builder.jar\org\apache\maven\mode\pom.xml中,

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>


2.默认插件
TODO

3.配置远程仓库

pom.xml中配置:
<repositories>        <repository>            <id>jboss</id>            <name>JBoss Repository</name>            <url>http://repository.jboss.com/maven2/</url>        <releases>        <enabled>true</enabled>        </releases>        <snapshots>        <enabled>false</enabled>        </snapshots>        </repository></repositories>

4.远程仓库的认证
大部分远程仓库无须认证就可以访问,但有时候出去安全方面的考虑,我们需要提供认证信息才能访问一些远程仓库。
或者,自己公司搭建的私服,不用认证可以下载jar包,但需要认证后才能deploy jar包到私服上。

配置认证信息与配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在setting.xml文件中。
这是因为POM往往是被提交到代码仓库中供所有成员访问的,而setting.xml一般只放在本机。因此,在setting.xml中配置认证信息更为安全。
<servers>    <server>    <id>snapshots</id>    <username>admin</username>    <password>admin123</password>    </server>    <server>    <id>releases</id>    <username>admin</username>    <password>admin123</password>   </server></servers>

5.部署至远程仓库
私服的一大作用就是部署第三方构件,包括组织内部生成的构件以及一些无法从外部仓库直接获取的构件。

将这些构件部署到私服中,供其他团队成员使用。

在pom.xml文件中,配置

<distributionManagement>        <repository>            <id>releases</id>            <url>http://192.168.106.106:8081/nexus/content/repositories/apiRelease</url>        </repository>        <snapshotRepository>            <id>snapshots</id>            <url>http://192.168.106.106:8081/nexus/content/repositories/apiSnapshots</url>        </snapshotRepository></distributionManagement>

往远程仓库部署构件的时候,往往需要认证(《远程仓库的认证》一节),
<distributionManagement>/<repository>/<id>与</servers></server>/<id>一致

6.mirror镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。
换句话说,任何一个客户从仓库Y获取的构件,都能够从它的镜像中获取。举个例子,
http://maven.net.cn/content/groups/public是中央仓库http://repo1.maven.org/maven2/
在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。
因此,可以配置Maven使用该镜像来替代中央仓库。
</mirrors>   <mirror>    <id>maven.net.cn</id>    <name>one of the central mirrors in China</name>    <mirrorOf>central</mirrorOf>    <url>http://maven.net.cn/content/groups/public</url>   </mirror></mirrors>
该例中,<mirrorOf>的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,
用户也可以使用同样的方法配置其他仓库的镜像。

关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,
使用一个私服地址就等于使用了所有需要的外部仓库,这就可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件
都可以从私服获得,私服就是所有仓库的镜像。这时,可以配置这样的一个镜像:
<!--配置私服镜像-->
<mirrors>
    <mirror>  
        <id>nexus</id>  
        <name>internal nexus repository</name>  
        <url>http://183.238.2.182:8081/nexus/content/groups/public/</url>  
        <mirrorOf>*</mirrorOf>  
    </mirror>  
</mirrors>

该例中<mirrorOf>的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http://183.238.2.182:8081/nexus/content/groups/public/。
如果该镜像仓库需要认证,则配置一个id为nexus的认证信息即可。

Nexus maven私服

1.配置maven从私服下载构件

当需要为项目添加Nexus私服上的public仓库时,可以按如下配置:
<project>......      <repositories>        <repository>            <id>nexus</id>            <name>Nexus</name>            <url>http://localhost:8081/nexus/content/groups/public/</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>          </repository>              </repositories>      <pluginRepositories>        <pluginRepository>            <id>nexus</id>            <name>Nexus</name>            <url>http://localhost:8081/nexus/content/groups/public/</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>        </pluginRepository>               </pluginRepositories></project>
这样的配置只对当前Maven项目有效,在实际应用中,我们往往想要通过一次配置就能让本机所有的Maven项目都使用自己的私服。
这个时候读者可能会想到setting.xml文件,该文件中的配置对所有本机Maven项目有效,但是setting.xml并不支持直接配置repositorys
和pluginRepositories。所幸Maven还提供了Profile机制,能让用户将仓库配置放到setting.xml中的Profile中,
<settings>......<profiles>    <profile>      <id>nexus</id>      <repositories>        <repository>            <id>nexus</id>            <name>Nexus</name>            <url>http://localhost:8081/nexus/content/groups/public/</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>          </repository>              </repositories>      <pluginRepositories>        <pluginRepository>            <id>nexus</id>            <name>Nexus</name>            <url>http://localhost:8081/nexus/content/groups/public/</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>        </pluginRepository>               </pluginRepositories>    </profile>  </profiles><activeProfiles>    <activeProfile>nexus</activeProfile></activeProfiles></settings>
以上配置会不时的访问中央仓库,我们希望所有的Maven下载请求都仅仅通过Nexus,以全面发挥私服的作用,
这个时候就需要借助于Maven的镜像配置了,如下:
<settings><mirrors>    <mirror>      <id>nexus</id>      <mirrorOf>*</mirrorOf>      <url>http://localhost:8081/nexus/content/groups/public/</url>    </mirror>  </mirrors>  <profiles>    <profile>      <id>nexus</id>      <repositories>        <repository>            <id>central</id>            <url>http://central</url>            <releases><enabled>true</enabled></releases>            <snapshots><enabled>true</enabled></snapshots>        </repository>              </repositories>      <pluginRepositories>        <pluginRepository>            <id>central</id>            <url>http://central</url>            <releases><enabled>true</enabled></releases>                 <snapshots><enabled>true</enabled></snapshots>        </pluginRepository>               </pluginRepositories>    </profile>  </profiles>  <activeProfiles>    <activeProfile>central</activeProfile>  </activeProfiles></settings>
这里需要解释的是仓库和插件仓库配置,它们的id都为central,也就是说,覆盖了超级POM中央仓库的配置,它们的url已无关紧要。
因为所有的请求都会通过镜像访问私服地址。配置仓库和插件仓库的主要目的是开启对快照版本下载的支持,当Maven需要下载发布版
或快照版构件的时候,它首先检查central,看该类型的构件是否支持,得到正面的回答后,再根据镜像规则转而访问私服仓库地址。


整理的setting.xml和pom.xml文件

<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">      <localRepository>E:\repository</localRepository>  <pluginGroups>  </pluginGroups>  <proxies></proxies>  <servers>      <server>        <id>releases</id>        <username>taiyang</username>        <password>123456</password>      </server>      <server>        <id>snapshots</id>        <username>taiyang</username>        <password>123456</password>      </server>  </servers>  <mirrors>    <mirror>      <id>nexus</id>      <mirrorOf>*</mirrorOf>      <name>central-mirror</name>      <url>http://私服ip:8081/nexus/content/groups/public</url>    </mirror>  </mirrors>  <profiles>    <profile>      <id>central</id>      <repositories>        <repository>            <id>central</id>            <name>local private central</name>            <url>http://central</url>            <releases>        <enabled>true</enabled>        <updatePolicy>always</updatePolicy>        <checksumPolicy>warn</checksumPolicy>        </releases>            <snapshots>            <enabled>true</enabled>        </snapshots>        </repository>              </repositories>      <pluginRepositories>        <pluginRepository>            <id>central</id>            <name>local private central</name>            <url>http://central</url>            <releases>        <enabled>true</enabled>        <updatePolicy>always</updatePolicy>        <checksumPolicy>warn</checksumPolicy>        </releases>            <snapshots>        <enabled>true</enabled>        </snapshots>        </pluginRepository>               </pluginRepositories>    </profile>  </profiles>  <activeProfiles>    <activeProfile>central</activeProfile>  </activeProfiles></settings>

<project 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/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>        <groupId>包路径</groupId>    <version>1.0</version>    <artifactId>项目名</artifactId>        <packaging>war</packaging>    <properties>        <java-version>1.7</java-version>        <org.springframework-version>3.2.3.RELEASE</org.springframework-version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>${org.springframework-version}</version>        </dependency>    ......    </dependencies>        <build>        <finalName>打包后的项目名</finalName>        <plugins>            <plugin><!--默认的maven-compiler-plugin插件java-version比较低,覆盖掉默认的-->            <artifactId>maven-compiler-plugin</artifactId>            <configuration>                <source>${java-version}</source>                <target>${java-version}</target>                <encoding>UTF-8</encoding>            </configuration>        </plugin>            <plugin>            <groupId>org.eclipse.jetty</groupId>            <artifactId>jetty-maven-plugin</artifactId>            <version>9.2.3.v20140905</version>        </plugin>        </plugins>        <resources>        <resource>            <directory>${profile.dir}</directory>            <filtering>true</filtering>        </resource>        <resource>            <directory>src/main/resources</directory>            <filtering>true</filtering>        </resource>        </resources>    </build>    <profiles>        <profile>            <id>dev</id>            <properties><!--上文多环境打包-->                <profile.dir>src/main/profiles/dev</profile.dir>            </properties>        </profile>        <profile>            <id>product</id>            <properties>                <profile.dir>src/main/profiles/product</profile.dir>            </properties>                    </profile>    </profiles>        <distributionManagement>        <repository>            <id>releases</id>            <url>http://私服ip:8081/nexus/content/repositories/releases/</url>        </repository>        <snapshotRepository>            <id>snapshots</id>            <url>http://私服ip:8081/nexus/content/repositories/snapshots/</url>        </snapshotRepository>    </distributionManagement>    </project>



0 1
原创粉丝点击