工程實例代碼:https://github.com/chocolateBlack/multi_env_folder_mavenjava
利用Maven、Jenkins實現項目自動化部署,可以按照bin、conf、lib文件進行打包,並可以經過Jenkins按照環境一鍵發不到服務器上git
path=${hdfs.path}
profile的配置以下:github
<profiles> <profile> <id>dev</id> <properties> <active.profile>dev</active.profile> <!-- 業務配置信息 --> <hdfs.path>/dev/wh/source/tp</hdfs.path> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <active.profile>dev</active.profile> <!-- 業務配置信息 --> <hdfs.path>/test/wh/source/tp</hdfs.path> </properties> </profile> </profiles>
接下來就須要讓maven可以解析conf文件夾中Maven屬性,這就是maven-resources-plugin要作的事情。
開啓資源過濾,並指定過濾的目錄。如下配置指定src/main/conf目錄下全部類型的文件開啓資源過濾,並將解析後的文件指定輸出到target/class/conf目錄下apache
<resources> <resource> <directory>src/main/conf/</directory> <filtering>true</filtering> <includes> <include>**/*.*</include> </includes> <targetPath>conf</targetPath><!-- 最終打包的目錄是target/class/conf,用戶assembly插件從這個目錄中讀取編譯好的配置文件 --> </resource> </resources>
2.其次,利用maven-assembly-plugin插件,將編譯好的項目分紅bin、conf、lib目錄。服務器
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <executions><execution><!-- 配置執行器 --> <id>make-assembly</id> <phase>package</phase><!-- 綁定到package生命週期階段上 --> <goals> <goal>single</goal><!-- 只運行一次 --> </goals> <configuration> <archive> <manifest> <!-- 此處指定main方法入口的class --> <mainClass>com.test.HelloMaven</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <finalName>${project.name}</finalName> <descriptor>src/main/assembly/assembly.xml</descriptor><!--配置描述文件路徑--> </configuration> </execution> </executions> </plugin>
關於文件分發的assembly.xml配置:app
<fileSets> <!-- 將src/main/bin下的文件,打包到目標目錄的bin文件夾下 --> <fileSet> <directory>src/main/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>755</fileMode> </fileSet> <!-- 通過maven-resources-plugin插件生成的配置文件位於target/classes/conf/中 --> <fileSet> <directory>target/classes/conf/</directory> <outputDirectory>conf</outputDirectory> <fileMode>755</fileMode> <lineEnding>unix</lineEnding> <excludes> <exclude>*.formatted</exclude> </excludes> </fileSet> </fileSets> <dependencySets> <!-- 工程單獨的jar,分發到lib目錄中 --> <dependencySet> <fileMode>755</fileMode> <outputFileNameMapping>${project.artifactId}-${project.version}.jar</outputFileNameMapping> <outputDirectory>/lib/</outputDirectory> <scope>runtime</scope> <includes> <include>${project.groupId}:${project.artifactId}</include> </includes> </dependencySet> <!-- jar-with-dependencies方式,包含依賴jar的大包,放到lib目錄下 --> <dependencySet> <fileMode>755</fileMode> <outputFileNameMapping>${project.name}-jar-with-dependencies.jar</outputFileNameMapping> <outputDirectory>/lib/</outputDirectory> <scope>runtime</scope> </dependencySet> </dependencySets>
項目結構圖:
maven
經過mvn package -Pdev命令打包後conf中的配置文件是按照dev環境生成的結果
解析後的conf.yamlpath=/dev/wh/source/tp
target目錄下的結構圖,紅框標記的就是期待的結構目錄
ide
3.項目按bin、conf、lib生成部署結構,剩下的事情就交給Jenkins,經過Jenkins以及其插件,將打包結果上傳目標服務器
以下主要描述Jenkins配置的主要幾個位置ui