Maven中的pom.xml配置文件詳解

来源:http://www.cnblogs.com/study-makes-me-happy/archive/2017/11/28/7908545.html
-Advertisement-
Play Games

原文:http://blog.csdn.net/u012152619/article/details/51485297 一般來說,上面的幾個配置項對任何項目都是必不可少的,定義了項目的基本屬性。 這裡有必要對一個不太常用的屬性classifier做一下解釋,因為有時候引用某個jar包,classif ...


原文:http://blog.csdn.net/u012152619/article/details/51485297

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3. <!-- 模型版本。maven2.0必須是這樣寫,現在是maven2唯一支持的版本 -->  
  4. <modelVersion>4.0.0</modelVersion>  
  5. <!-- 公司或者組織的唯一標誌,並且配置時生成的路徑也是由此生成, 如com.winner.trade,maven會將該項目打成的jar包放本地路徑:/com/winner/trade -->  
  6. <groupId>com.winner.trade</groupId>  
  7. <!-- 本項目的唯一ID,一個groupId下麵可能多個項目,就是靠artifactId來區分的 -->  
  8. <artifactId>trade-core</artifactId>  
  9. <!-- 本項目目前所處的版本號 -->  
  10. <version>1.0.0-SNAPSHOT</version>  
  11. <!-- 打包的機制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,預設為jar -->  
  12. <packaging>jar</packaging>  
  13. <!-- 幫助定義構件輸出的一些附屬構件,附屬構件與主構件對應,有時候需要加上classifier才能唯一的確定該構件 不能直接定義項目的classifer,因為附屬構件不是項目直接預設生成的,而是由附加的插件幫助生成的 -->  
  14. <classifier>...</classifier>  
  15. <!-- 定義本項目的依賴關係 -->  
  16. <dependencies>  
  17. <!-- 每個dependency都對應這一個jar包 -->  
  18. <dependency>  
  19. <!--一般情況下,maven是通過groupId、artifactId、version這三個元素值(俗稱坐標)來檢索該構件, 然後引入你的工程。如果別人想引用你現在開發的這個項目(前提是已開發完畢併發布到了遠程倉庫),-->   
  20. <!--就需要在他的pom文件中新建一個dependency節點,將本項目的groupId、artifactId、version寫入, maven就會把你上傳的jar包下載到他的本地 -->  
  21. <groupId>com.winner.trade</groupId>  
  22. <artifactId>trade-test</artifactId>  
  23. <version>1.0.0-SNAPSHOT</version>  
  24. <!-- maven認為,程式對外部的依賴會隨著程式的所處階段和應用場景而變化,所以maven中的依賴關係有作用域(scope)的限制。 -->  
  25. <!--scope包含如下的取值:compile(編譯範圍)、provided(已提供範圍)、runtime(運行時範圍)、test(測試範圍)、system(系統範圍) -->  
  26. <scope>test</scope>  
  27. <!-- 設置指依賴是否可選,預設為false,即子項目預設都繼承:為true,則子項目必需顯示的引入,與dependencyManagement里定義的依賴類似  -->  
  28. <optional>false</optional>  
  29. <!-- 屏蔽依賴關係。 比如項目中使用的libA依賴某個庫的1.0版,libB依賴某個庫的2.0版,現在想統一使用2.0版,就應該屏蔽掉對1.0版的依賴 -->  
  30. <exclusions>  
  31. <exclusion>  
  32. <groupId>org.slf4j</groupId>  
  33. <artifactId>slf4j-api</artifactId>  
  34. </exclusion>  
  35. </exclusions>  
  36. </dependency>  
  37. </dependencies>  
  38. <!-- 為pom定義一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->  
  39. <properties>  
  40. <file.encoding>UTF-8</file.encoding>  
  41. <java.source.version>1.5</java.source.version>  
  42. <java.target.version>1.5</java.target.version>  
  43. </properties>  
  44.     ...  
  45. </project>  

 

一般來說,上面的幾個配置項對任何項目都是必不可少的,定義了項目的基本屬性。

這裡有必要對一個不太常用的屬性classifier做一下解釋,因為有時候引用某個jar包,classifier不寫的話會報錯。

classifier元素用來幫助定義構件輸出的一些附屬構件。附屬構件與主構件對應,比如主構件是 kimi-app-2.0.0.jar,該項目可能還會通過使用一些插件生成 如kimi-app-2.0.0-javadoc.jar (Java文檔)、 kimi-app-2.0.0-sources.jar(Java源代碼) 這樣兩個附屬構件。這時候,javadoc、sources就是這兩個附屬構件的classifier,這樣附屬構件也就擁有了自己唯一的坐標。

classifier的用途在於:

1. maven download  javadoc / sources jar包的時候,需要藉助classifier指明要下載那個附屬構件

2. 引入依賴的時候,有時候僅憑groupId、artifactId、version無法唯一的確定某個構件,需要藉助classifier來進一步明確目標。比如JSON-lib,有時候會同一個版本會提供多個jar包,在JDK1.5環境下是一套,在JDK1.3環境下是一套:

 

引用它的時候就要註明JDK版本,否則maven不知道你到底需要哪一套jar包:

 

[html] view plain copy        
  1. <dependency>  
  2.            <groupId>net.sf.json-lib</groupId>  
  3.            <artifactId>json-lib</artifactId>  
  4.             <version>2.4</version>  
  5.            <classifier>jdk15</classifier>  
  6. </dependency>  

 

 

構建配置

 

[html] view plain copy        
  1. <build>  
  2.   
  3.     <!-- 產生的構件的文件名,預設值是${artifactId}-${version}。 -->  
  4.     <finalName>myPorjectName</finalName>  
  5.   
  6.     <!-- 構建產生的所有文件存放的目錄,預設為${basedir}/target,即項目根目錄下的target -->  
  7.     <directory>${basedir}/target</directory>  
  8.   
  9.     <!--當項目沒有規定目標(Maven2叫做階段(phase))時的預設值, -->  
  10.     <!--必須跟命令行上的參數相同例如jar:jar,或者與某個階段(phase)相同例如install、compile等 -->  
  11.     <defaultGoal>install</defaultGoal>  
  12.   
  13.     <!--當filtering開關打開時,使用到的過濾器屬性文件列表。 -->  
  14.     <!--項目配置信息中諸如${spring.version}之類的占位符會被屬性文件中的實際值替換掉 -->  
  15.     <filters>  
  16.         <filter>../filter.properties</filter>  
  17.     </filters>  
  18.   
  19.     <!--項目相關的所有資源路徑列表,例如和項目相關的配置文件、屬性文件,這些資源被包含在最終的打包文件里。 -->  
  20.     <resources>  
  21.         <resource>  
  22.   
  23.             <!--描述了資源的目標路徑。該路徑相對target/classes目錄(例如${project.build.outputDirectory})。 -->  
  24.             <!--舉個例子,如果你想資源在特定的包里(org.apache.maven.messages),你就必須該元素設置為org/apache/maven/messages。 -->  
  25.             <!--然而,如果你只是想把資源放到源碼目錄結構里,就不需要該配置。 -->  
  26.             <targetPath>resources</targetPath>  
  27.   
  28.             <!--是否使用參數值代替參數名。參數值取自properties元素或者文件里配置的屬性,文件在filters元素里列出。 -->  
  29.             <filtering>true</filtering>  
  30.   
  31.             <!--描述存放資源的目錄,該路徑相對POM路徑 -->  
  32.             <directory>src/main/resources</directory>  
  33.   
  34.             <!--包含的模式列表 -->  
  35.             <includes>  
  36.                 <include>**/*.properties</include>  
  37.                 <include>**/*.xml</include>  
  38.             </includes>  
  39.   
  40.             <!--排除的模式列表 如果<include>與<exclude>劃定的範圍存在衝突,以<exclude>為準 -->  
  41.             <excludes>  
  42.                 <exclude>jdbc.properties</exclude>  
  43.             </excludes>  
  44.   
  45.         </resource>  
  46.     </resources>  
  47.   
  48.     <!--單元測試相關的所有資源路徑,配製方法與resources類似 -->  
  49.     <testResources>  
  50.         <testResource>  
  51.             <targetPath />  
  52.             <filtering />  
  53.             <directory />  
  54.             <includes />  
  55.             <excludes />  
  56.         </testResource>  
  57.     </testResources>  
  58.   
  59.     <!--項目源碼目錄,當構建項目的時候,構建系統會編譯目錄里的源碼。該路徑是相對於pom.xml的相對路徑。 -->  
  60.     <sourceDirectory>${basedir}\src\main\java</sourceDirectory>  
  61.   
  62.     <!--項目腳本源碼目錄,該目錄和源碼目錄不同, <!-- 絕大多數情況下,該目錄下的內容會被拷貝到輸出目錄(因為腳本是被解釋的,而不是被編譯的)。 -->  
  63.     <scriptSourceDirectory>${basedir}\src\main\scripts  
  64.     </scriptSourceDirectory>  
  65.   
  66.     <!--項目單元測試使用的源碼目錄,當測試項目的時候,構建系統會編譯目錄里的源碼。該路徑是相對於pom.xml的相對路徑。 -->  
  67.     <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory>  
  68.   
  69.     <!--被編譯過的應用程式class文件存放的目錄。 -->  
  70.     <outputDirectory>${basedir}\target\classes</outputDirectory>  
  71.   
  72.     <!--被編譯過的測試class文件存放的目錄。 -->  
  73.     <testOutputDirectory>${basedir}\target\test-classes  
  74.     </testOutputDirectory>  
  75.   
  76.     <!--項目的一系列構建擴展,它們是一系列build過程中要使用的產品,會包含在running bulid‘s classpath裡面。 -->  
  77.     <!--他們可以開啟extensions,也可以通過提供條件來激活plugins。 -->  
  78.     <!--簡單來講,extensions是在build過程被激活的產品 -->  
  79.     <extensions>  
  80.   
  81.         <!--例如,通常情況下,程式開發完成後部署到線上Linux伺服器,可能需要經歷打包、 -->  
  82.         <!--將包文件傳到伺服器、SSH連上伺服器、敲命令啟動程式等一系列繁瑣的步驟。 -->  
  83.         <!--實際上這些步驟都可以通過Maven的一個插件 wagon-maven-plugin 來自動完成 -->  
  84.         <!--下麵的擴展插件wagon-ssh用於通過SSH的方式連接遠程伺服器, -->  
  85.         <!--類似的還有支持ftp方式的wagon-ftp插件 -->  
  86.         <extension>  
  87.             <groupId>org.apache.maven.wagon</groupId>  
  88.             <artifactId>wagon-ssh</artifactId>  
  89.             <version>2.8</version>  
  90.         </extension>  
  91.   
  92.     </extensions>  
  93.   
  94.     <!--使用的插件列表 。 -->  
  95.     <plugins>  
  96.         <plugin>  
  97.             <groupId></groupId>  
  98.             <artifactId>maven-assembly-plugin</artifactId>  
  99.             <version>2.5.5</version>  
  100.   
  101.             <!--在構建生命周期中執行一組目標的配置。每個目標可能有不同的配置。 -->  
  102.             <executions>  
  103.                 <execution>  
  104.   
  105.                     <!--執行目標的標識符,用於標識構建過程中的目標,或者匹配繼承過程中需要合併的執行目標 -->  
  106.                     <id>assembly</id>  
  107.   
  108.                     <!--綁定了目標的構建生命周期階段,如果省略,目標會被綁定到源數據里配置的預設階段 -->  
  109.                     <phase>package</phase>  
  110.   
  111.                     <!--配置的執行目標 -->  
  112.                     <goals>  
  113.                         <goal>single</goal>  
  114.                     </goals>  
  115.   
  116.                     <!--配置是否被傳播到子POM -->  
  117.                     <inherited>false</inherited>  
  118.   
  119.                 </execution>  
  120.             </executions>  
  121.   
  122.             <!--作為DOM對象的配置,配置項因插件而異 -->  
  123.             <configuration>  
  124.                 <finalName>${finalName}</finalName>  
  125.                 <appendAssemblyId>false</appendAssemblyId>  
  126.                 <descriptor>assembly.xml</descriptor>  
  127.             </configuration>  
  128.   
  129.             <!--是否從該插件下載Maven擴展(例如打包和類型處理器), -->  
  130.             <!--由於性能原因,只有在真需要下載時,該元素才被設置成true。 -->  
  131.             <extensions>false</extensions>  
  132.   
  133.             <!--項目引入插件所需要的額外依賴 -->  
  134.             <dependencies>  
  135.                 <dependency>...</dependency>  
  136.             </dependencies>  
  137.   
  138.             <!--任何配置是否被傳播到子項目 -->  
  139.             <inherited>true</inherited>  
  140.   
  141.         </plugin>  
  142.     </plugins>  
  143.   
  144.     <!--主要定義插件的共同元素、擴展元素集合,類似於dependencyManagement, -->  
  145.     <!--所有繼承於此項目的子項目都能使用。該插件配置項直到被引用時才會被解析或綁定到生命周期。 -->  
  146.     <!--給定插件的任何本地配置都會覆蓋這裡的配置 -->  
  147.     <pluginManagement>  
  148.         <plugins>...</plugins>  
  149.     </pluginManagement>  
  150.   
  151. </build>  

 

pom裡面的倉庫與setting.xml里的倉庫功能是一樣的。主要的區別在於,pom里的倉庫是個性化的。比如一家大公司里的setting文件是公用的,所有項目都用一個setting文件,但各個子項目卻會引用不同的第三方庫,所以就需要在pom里設置自己需要的倉庫地址。

 

分發配置

 

[html] view plain copy        
  1. <!--項目分發信息,在執行mvn deploy後表示要發佈的位置。 -->  
  2. <!--有了這些信息就可以把網站部署到遠程伺服器或者把構件部署到遠程倉庫。 -->  
  3. <distributionManagement>  
  4.   
  5.     <!--部署項目產生的構件到遠程倉庫需要的信息 -->  
  6.     <repository>  
  7.   
  8.         <!--是分配給快照一個唯一的版本號(由時間戳和構建流水號),還是每次都使用相同的版本號 -->  
  9.         <!--參見repositories/repository元素 -->  
  10.         <uniqueVersion>true</uniqueVersion>  
  11.   
  12.         <id> repo-id </id>  
  13.         <name> repo-name</name>  
  14.         <url>file://${basedir}/target/deploy </url>  
  15.         <layout />  
  16.   
  17.     </repository>  
  18.   
  19.     <!--構件的快照部署到哪裡,如果沒有配置該元素,預設部署到repository元素配置的倉庫 -->  
  20.     <snapshotRepository>  
  21.         <uniqueVersion />  
  22.         <id />  
  23.         <name />  
  24.         <url />  
  25.         <layout />  
  26.     </snapshotRepository>  
  27.   
  28.     <!--部署項目的網站需要的信息 -->  
  29.     <site>  
  30.   
  31.         <!--部署位置的唯一標識符,用來匹配站點和settings.xml文件里的配置 -->  
  32.         <id> site-id </id>  
  33.   
  34.         <!--部署位置的名稱 -->  
  35.         <name> site-name</name>  
  36.   
  37.         <!--部署位置的URL,按protocol://hostname/path形式 -->  
  38.         <url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web </url>  
  39.   
  40.     </site>  
  41.   
  42.     <!--項目下載頁面的URL。如果沒有該元素,用戶應該參考主頁。 -->  
  43.     <!--使用該元素的原因是:幫助定位那些不在倉庫里的構件(由於license限制)。 -->  
  44.     <downloadUrl />  
  45.   
  46.     <!--如果構件有了新的groupID和artifact ID(構件移到了新的位置),這裡列出構件的重定位信息。 -->  
  47.     <relocation>  
  48.   
  49.         <!--構件新的group ID -->  
  50.         <groupId />  
  51.   
  52.         <!--構件新的artifact ID -->  
  53.         <artifactId />  
  54.   
  55.         <!--構件新的版本號 -->  
  56.         <version />  
  57.   
  58.         <!--顯示給用戶的,關於移動的額外信息,例如原因。 -->  
  59.         <message />  
  60.   
  61.     </relocation>  
  62.   
  63.     <!--給出該構件在遠程倉庫的狀態。不得在本地項目中設置該元素,因為這是工具自動更新的。 -->  
  64.     <!--有效的值有:none(預設),converted(倉庫管理員從Maven 1 POM轉換過來), -->  
  65.     <!--partner(直接從伙伴Maven 2倉庫同步過來),deployed(從Maven 2實例部署),verified(被核實時正確的和最終的)。 -->  
  66.     <status />  
  67.   
  68. </distributionManagement>  

 

 

倉庫配置

 

[html] view plain copy        
  1. <!--發現依賴和擴展的遠程倉庫列表。 -->  
  2. <repositories>  
  3.   
  4.     <!--包含需要連接到遠程倉庫的信息 -->  
  5.     <repository>  
  6.   
  7.         <!--如何處理遠程倉庫里發佈版本的下載 -->  
  8.         <releases>  
  9.   
  10.             <!--true或者false表示該倉庫是否為下載某種類型構件(發佈版,快照版)開啟。 -->  
  11.             <enabled />  
  12.   
  13.             <!--該元素指定更新發生的頻率。Maven會比較本地POM和遠程POM的時間戳。 -->  
  14.             <!--這裡的選項是:always(一直),daily(預設,每日), -->  
  15.             <!--interval:X(這裡X是以分鐘為單位的時間間隔),或者never(從不)。 -->  
  16.             <updatePolicy />  
  17.   
  18.             <!--當Maven驗證構件校驗文件失敗時該怎麼做: -->  
  19.             <!--ignore(忽略),fail(失敗),或者warn(警告)。 -->  
  20.             <checksumPolicy />  
  21.   
  22.         </releases>  
  23.   
  24.         <!--如何處理遠程倉庫里快照版本的下載。有了releases和snapshots這兩組配置, -->  
  25.         <!--POM就可以在每個單獨的倉庫中,為每種類型的構件採取不同的策略。 -->  
  26.         <!--例如,可能有人會決定只為開發目的開啟對快照版本下載的支持 -->  
  27.         <snapshots>  
  28.             <enabled />  
  29.             <updatePolicy />  
  30.             <checksumPolicy />  
  31.         </snapshots>  
  32.   
  33.         <!--遠程倉庫唯一標識符。可以用來匹配在settings.xml文件里配置的遠程倉庫 -->  
  34.         <id> repo-id </id>  
  35.   
  36.         <!--遠程倉庫名稱 -->  
  37.         <name> repo-name</name>  
  38.   
  39.         <!--遠程倉庫URL,按protocol://hostname/path形式 -->  
  40.         <url>http://192.168.1.169:9999/repository/ </url>  
  41.   
  42.         <!--用於定位和排序構件的倉庫佈局類型-可以是default(預設)或者legacy(遺留)。 -->  
  43.         <!--Maven 2為其倉庫提供了一個預設的佈局; -->  
  44.         <!--然而,Maven1.x有一種不同的佈局。 -->  
  45.         <!--我們可以使用該元素指定佈局是default(預設)還是legacy(遺留)。 -->  
  46.         <layout> default</layout>  
  47.   
  48.     </repository>  
  49.   
  50. </repositories>  
  51.   
  52. <!--發現插件的遠程倉庫列表,這些插件用於構建和報表 -->  
  53. <pluginRepositories>  
  54.   
  55.     <!--包含需要連接到遠程插件倉庫的信息.參見repositories/repository元素 -->  
  56.     <pluginRepository />  
  57.   
  58. </pluginRepositories>  


 

 

profile配置

 

[html] view plain copy        
  1. <!--在列的項目構建profile,如果被激活,會修改構建處理 -->  
  2. <profiles>  
  3.   
  4.     <!--根據環境參數或命令行參數激活某個構建處理 -->  
  5.     <profile>  
  6.         <!--自動觸發profile的條件邏輯。Activation是profile的開啟鑰匙。 -->  
  7.         <activation>  
  8.   
  9.             <!--profile預設是否激活的標識 -->  
  10.             <activeByDefault>false</activeByDefault>  
  11.   
  12.             <!--activation有一個內建的java版本檢測,如果檢測到jdk版本與期待的一樣,profile被激活。 -->  
  13.             <jdk>1.7</jdk>  
  14.   
  15.             <!--當匹配的操作系統屬性被檢測到,profile被激活。os元素可以定義一些操作系統相關的屬性。 -->  
  16.             <os>  
  17.   
  18.                 <!--激活profile的操作系統的名字 -->  
  19.                 <name>Windows XP</name>  
  20.   
  21.                 <!--激活profile的操作系統所屬家族(如 'windows') -->  
  22.                 <family>Windows</family>  
  23.   
  24.                 <!--激活profile的操作系統體繫結構 -->  
  25.                 <arch>x86</arch>&nb
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫Code First 時(使用的是MySql資料庫),添加好EntityFrame、MySql.Data 、MySql.Data.Entity後 ,寫好TestDbContext類。 運行時報出一個"MySql.Data.MySqIClient.MySqlProviderSevices”違反了繼承 ...
  • 如圖,左圖是效果,右圖是原理,右圖X軸代表圖像一個像素點的灰度,Y軸代表RGB三個顏色對應的偽彩色圖顏色。代碼如下: for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { Color c = bmp.GetPixel ...
  • 針對WCF分散式消息隊列MSMQ大大提高了處理能力,無論是發送方還是接收方都不用等待對方返回成功消息,但是不適合Client與Server端的實時交互。WCF分散式消息隊列,在處理日誌方面,效果還是很顯著的。當然,針對消息隊列的處理技術,有很多種,例如:ActiveMQ、RabbitMQ、ZeroM... ...
  • 演示產品下載地址:http://www.jinhusns.com ...
  • 返回總目錄 本小節目錄 Consolidate Duplicate Conditional Fragments(合併重覆的條件片段) Remove Control Flag(移除控制標記) 3Consolidate Duplicate Conditional Fragments(合併重覆的條件片段) ...
  • 使用jdbcTemplate 原理是把載入驅動Class.forName("com.mysql.jdbc.Driver"); 和連接資料庫Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sw_datab ...
  • 1.首先要下載PHPExcel放到vendor文件夾下,我的路徑是:項目/vendor/PHPExcel/,把下載的PHPExcel文件放在這裡 2.前端代碼 3.後臺代碼 輸出結果: 註意: 引入第三方類庫使用vendor();是按照命名空間的形式。底層代碼會把“ . ”自動替換成" / ",所以 ...
  • 1 非對稱加密演算法 1.1 概述 1976年,美國學者Dime和Henman為解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,允許在不安全的媒體上的通訊雙方交換信息,安全地達成一致的密鑰,這就是“公開密鑰系統”。 與對稱加密演算法不同,非對稱加密演算法需要兩個密鑰:公開密鑰(publickey ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...