一文搞懂Maven配置,從此不再糊塗下載依賴(文末有成品)

来源:https://www.cnblogs.com/Innocent-children/p/18165653
-Advertisement-
Play Games

一般來說Maven都是配合著idea一起使用,下載依賴速度慢就去網上找個鏡像配置一下,但總會遇到莫名其妙的問題,比如鏡像源不生效、Error reading file pom.xml等等。今天詳細講解一下maven配置文件settings.xml的配置方法。 小知識 maven的配置文件存在於兩個地 ...


一般來說Maven都是配合著idea一起使用,下載依賴速度慢就去網上找個鏡像配置一下,但總會遇到莫名其妙的問題,比如鏡像源不生效、Error reading file pom.xml等等。今天詳細講解一下maven配置文件settings.xml的配置方法。

小知識

maven的配置文件存在於兩個地方,一個是用戶目錄下的.m2目錄:${user.home}/.m2/;另一個是maven程式目錄下的conf目錄下:C:\Program Files\apache-maven-3.9.6\conf(假設maven程式被解壓到了C:\Program Files\)
如果沒有指定使用哪一個settings配置,maven會使用這兩個配置文件合併後的配置,相同的配置項會優先使用用戶目錄${user.home}/.m2/中settings文件內的配置。建議這兩個目錄的settings文件保持一致。

settings.xml中的頂級標簽

<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 https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>

我們逐一講解一下

localRepository

localRepository就是你的本地倉庫位置,一般使用idea的話會在idea中配置這個屬性,但使用cmd的話就會用到這個配置,示例配置:<localRepository>D:/maven_repository/</localRepository>

interactiveMode

interactiveMode設置為true時,表示Maven處於交互模式。在交互模式下,當Maven需要用戶輸入時(例如需要用戶確認某些操作或提供必要的信息),它會提示用戶並等待用戶的輸入。這對於需要用戶交互的操作非常有用,例如在部署過程中需要用戶提供密碼或確認某些操作。
interactiveMode設置為false時,表示Maven處於非交互模式。在非交互模式下,Maven不會提示用戶輸入,而是使用預設值或者根據配置自動執行操作。這對於自動化構建或者持續集成環境非常有用,因為在這些場景下通常不希望Maven等待用戶輸入。
interactiveMode預設是true,但也可以在settings中配置一下,示例:<interactiveMode>true</interactiveMode>

offline

offline設置為true時,表示Maven處於離線模式。在離線模式下,Maven不會嘗試從遠程倉庫下載任何依賴項或插件,而是只使用本地倉庫中已有的資源。這意味著,如果本地倉庫中缺少某些依賴項,Maven將無法自動下載它們,並可能導致構建失敗。
offline設置為false時,表示Maven處於線上模式。在線上模式下,Maven會根據需要從遠程倉庫下載依賴項和插件,並將它們存儲在本地倉庫中以供後續使用。
使用離線模式的主要目的是在無法連接到遠程倉庫的情況下進行構建,例如在沒有網路連接的環境中,或者為了加快構建速度而避免不必要的網路請求。
offline預設是false,也可以在settings中配置一下,示例:<offline>false</offline>

pluginGroups

pluginGroups是一個用於配置插件組的參數。它允許你定義一組插件的首碼,以便在項目的POM文件中使用較短的插件名稱。
當你在POM文件中使用插件時,通常需要指定插件的完整坐標,包括groupIdartifactIdversion。例如:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  ...
</plugin>

但是,如果你在pluginGroups中配置了插件組,就可以省略插件的groupId,只使用較短的artifactId。Maven會根據pluginGroups中的配置自動推斷完整的插件坐標。
下麵是一個pluginGroups的配置示例:

<settings>
  ...
  <pluginGroups>
    <pluginGroup>org.apache.maven.plugins</pluginGroup>
    <pluginGroup>org.codehaus.mojo</pluginGroup>
  </pluginGroups>
  ...
</settings>

在上述示例中,我們定義了兩個插件組:org.apache.maven.plugins和org.codehaus.mojo。這意味著在POM文件中使用這兩個組下的插件時,可以省略groupId。
例如,在配置了上述pluginGroups後,可以在POM文件中簡化插件的聲明:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  ...
</plugin>

Maven會自動將maven-compiler-plugin解析為完整的坐標org.apache.maven.plugins:maven-compiler-plugin:3.8.1
使用pluginGroups的好處是可以簡化POM文件中的插件聲明,減少重覆的groupId配置。它提供了一種更簡潔的方式來引用常用的插件組。
需要註意的是,如果項目的POM文件中明確指定了插件的groupId,那麼pluginGroups中的配置將被忽略,Maven會使用POM文件中指定的完整坐標。

servers

servers是一個用於配置伺服器身份驗證信息的參數。它允許你定義一組伺服器的身份驗證詳細信息,以便Maven在訪問受保護的資源(如部署到遠程倉庫)時使用這些信息進行身份驗證。
當Maven需要訪問受保護的資源時,它會查找servers配置,並使用匹配的伺服器身份驗證信息來進行身份驗證。
下麵是一個servers的配置示例,一般使用私服會用到這個配置:

<settings>
  ...
  <servers>
    <server>
      <id>my-repo</id>
      <username>my-username</username>
      <password>my-password</password>
    </server>
    <server>
      <id>another-repo</id>
      <username>another-username</username>
      <password>another-password</password>
    </server>
  </servers>
  ...
</settings>

在上述示例中,我們定義了兩個伺服器的身份驗證信息:
第一個伺服器的idmy-repo,對應的用戶名為my-username,密碼為my-password
第二個伺服器的idanother-repo,對應的用戶名為another-username,密碼為another-password
伺服器的id是一個唯一的標識符,用於在其他配置或POM文件中引用該伺服器。例如,在pom.xml的distributionManagement部分中,你可以使用伺服器的id來指定部署到遠程倉庫時使用的身份驗證信息。

<project>
  ...
	<distributionManagement>
	  <repository>
	    <id>my-repo</id>
	    <url>https://example.com/my-repo</url>
	  </repository>
	</distributionManagement>
  ...
</project>

在上述示例中,my-repo對應於servers中定義的伺服器id。Maven將使用與my-repo關聯的用戶名和密碼來訪問和部署構件到指定的遠程倉庫。
通過在settings.xml文件中配置servers,你可以集中管理Maven訪問受保護資源時所需的身份驗證信息。這樣可以避免在項目的POM文件中直接存儲敏感的用戶名和密碼,提高了安全性。
需要註意的是,在Maven2.1.0及更新的版本中,servers中的密碼可以使用Maven的加密機制進行加密,以進一步提高安全性。你可以使用Maven的內置加密功能或使用外部加密工具來加密密碼,然後將加密後的密碼存儲在settings.xml文件中。

使用Maven加密密碼:

  • 打開命令行終端或命令提示符。
  • 導航到Maven的安裝目錄下的bin目錄。
  • 執行以下命令來生成主密碼(master password):
    mvn --encrypt-master-password
    
    系統會提示你輸入主密碼,輸入後按回車鍵。Maven會生成一個加密後的主密碼。
  • 將加密後的主密碼複製,並將其添加到settings.xml文件中的<settings>元素下,使用<settingsSecurity>元素進行配置:
    <settings>
      <settingsSecurity>
        <master>{加密後的主密碼}</master>
      </settingsSecurity>
      ...
    </settings>
    
  • 執行以下命令生成加密後的伺服器密碼:
    mvn --encrypt-password
    
    系統會提示你輸入要加密的密碼,輸入後按回車鍵。Maven會生成一個加密後的密碼。
  • 將加密後的密碼複製,並將其添加到settings.xml文件中對應伺服器的<password>元素中:
    <servers>
      <server>
        <id>my-server</id>
        <username>my-username</username>
        <password>{加密後的密碼}</password>
      </server>
    </servers>
    

完成上述步驟後,settings.xml文件中的密碼就被加密了。當Maven需要訪問受保護的資源時,它會使用主密碼來解密伺服器密碼,然後使用解密後的密碼進行身份驗證。
以下是一個完整的示例:

<settings>
  <settingsSecurity>
    <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
  </settingsSecurity>
  
  <servers>
    <server>
      <id>my-server</id>
      <username>my-username</username>
      <password>{COQLCE6DU6GtcS5P=}</password>
    </server>
  </servers>
</settings>

主密碼和伺服器密碼都放在了settings文件中,那誰拿到這個文件都可以訪問伺服器,和不加密沒什麼區別,建議使用私鑰進行加密,maven密碼加密部分我會新寫一篇文章,感興趣的可以關註一下。

mirrors

這個配置項使我們使用最多的了,mirrors用於配置倉庫鏡像。倉庫鏡像是一種代理伺服器,用於替代原始的倉庫URL,以提高下載速度、增強可用性或提供額外的安全性。
當Maven需要從倉庫下載構件時,它會先檢查是否有匹配的鏡像配置。如果找到了匹配的鏡像,Maven將使用鏡像URL替代原始的倉庫URL進行下載。
下麵是一個示例:

<settings>
  ...
  <mirrors>
    <mirror>
      <id>my-mirror</id>
      <name>My Mirror</name>
      <url>https://my-mirror.example.com/repo</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

<id>:鏡像的唯一標識符。它用於區分不同的鏡像配置。
<name>:鏡像的名稱。這個名稱是可選的,主要用於提供一個友好的描述。
<url>:鏡像的URL。這是鏡像伺服器的實際地址,Maven將使用這個URL替代原始的倉庫URL進行下載。
<mirrorOf>:指定鏡像所代表的原始倉庫。這個值可以是倉庫的ID或者一個特殊的值,用於匹配多個倉庫。常見的值有:

  • central:替代Maven中央倉庫。
  • *:匹配所有倉庫。
  • external:*:匹配除了本地倉庫之外的所有外部倉庫。
  • repo1,repo2:匹配倉庫ID為repo1和repo2的倉庫。
  • *,!repo1:匹配除了倉庫ID為repo1之外的所有倉庫。

當Maven需要下載構件時,它會按照以下順序查找鏡像:

  • 如果有匹配的鏡像,且<mirrorOf>的值與要下載的倉庫ID完全匹配,則使用該鏡像。
  • 如果有匹配的鏡像,且<mirrorOf>的值為*,則使用該鏡像。
  • 如果有匹配的鏡像,且<mirrorOf>的值為external:*,且要下載的倉庫不是本地倉庫,則使用該鏡像。
  • 如果有匹配的鏡像,且<mirrorOf>的值包含要下載的倉庫ID,則使用該鏡像。
  • 如果沒有找到匹配的鏡像,則直接使用原始的倉庫URL進行下載。

當Maven需要從倉庫下載構件時,它會按照以下順序查找匹配的鏡像配置:

  1. 精確匹配:

    • 如果有一個鏡像的<mirrorOf>值與要下載的倉庫ID完全匹配,則使用該鏡像。
    • 例如,如果要下載的倉庫IDmy-repo,且有一個鏡像的<mirrorOf>值為my-repo,則使用該鏡像。
  2. 全匹配:

    • 如果有一個鏡像的<mirrorOf>值為*,則使用該鏡像。
    • 這個鏡像將匹配所有的倉庫,無論倉庫ID是什麼。
  3. 外部倉庫匹配:

    • 如果有一個鏡像的<mirrorOf>值為external:*,且要下載的倉庫不是本地倉庫,則使用該鏡像。
    • 這個鏡像將匹配所有外部倉庫,但不包括本地倉庫。
  4. 倉庫列表匹配:

    • 如果有一個鏡像的<mirrorOf>值包含要下載的倉庫ID,則使用該鏡像。
    • 例如,如果要下載的倉庫IDrepo1,且有一個鏡像的<mirrorOf>值為repo1,repo2,則使用該鏡像。
  5. 排除倉庫匹配:

    • 如果有一個鏡像的<mirrorOf>值排除了要下載的倉庫ID,則不使用該鏡像。
    • 例如,如果要下載的倉庫IDrepo1,且有一個鏡像的<mirrorOf>值為*,!repo1,則不使用該鏡像。
  6. 如果沒有找到匹配的鏡像,Maven將直接使用原始的倉庫URL進行下載。

在這裡推薦一下阿裡巴巴開源鏡像站,裡面有很多鏡像,有需要的同學可以去看看

proxies

需要通過代理伺服器訪問網路資源(如下載構件)時,可以使用<proxies>配置來指定代理伺服器的詳細信息。
下麵是一個<proxies>配置的示例:

<settings>
  ...
  <proxies>
    <proxy>
      <id>my-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.example.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>proxypassword</password>
      <nonProxyHosts>*.example.com|localhost</nonProxyHosts>
    </proxy>
  </proxies>
  ...
</settings>
  • <id>:代理的唯一標識符。它用於區分不同的代理配置。
  • <active>:表示是否激活該代理配置。值為true表示激活,false表示不激活。
  • <protocol>:指定代理伺服器使用的協議。常見的值有httphttps
  • <host>:代理伺服器的主機名或IP地址。
  • <port>:代理伺服器的埠號。
  • <username>:連接代理伺服器時使用的用戶名(如果代理伺服器需要身份驗證)。
  • <password>:連接代理伺服器時使用的密碼(如果代理伺服器需要身份驗證)。
  • <nonProxyHosts>:指定不需要通過代理伺服器訪問的主機列表。可以使用|分隔多個主機,支持通配符*

當Maven需要訪問網路資源時,它會按照以下順序查找匹配的代理配置:

  • 如果有激活的代理配置(<active>true),且目標主機不在<nonProxyHosts>列表中,則使用該代理。
  • 如果有多個激活的代理配置滿足條件,則按照它們在<proxies>中的順序,使用第一個匹配的代理。
  • 如果沒有找到匹配的代理配置,則直接連接目標主機,不使用代理。

profiles

Profile允許你定義一組配置設置,並根據不同的環境或條件激活這些設置。通過使用Profile,可以輕鬆地在不同的環境中切換配置。
下麵是一個<profiles>配置的示例:

<settings>
  ...
  <profiles>
    <profile>
      <id>development</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <db.url>jdbc:mysql://localhost/mydb</db.url>
        <db.username>devuser</db.username>
        <db.password>devpassword</db.password>
      </properties>
    </profile>
    <profile>
      <id>production</id>
      <activation>
      	<jdk>1.5</jdk>
        <os>
          <name>Windows XP</name>
          <family>Windows</family>
          <arch>x86</arch>
          <version>5.1.2600</version>
        </os>
        <property>
          <name>mavenVersion</name>
          <value>2.0.3</value>
        </property>
        <file>
          <exists>${basedir}/file2.properties</exists>
          <missing>${basedir}/file1.properties</missing>
        </file>
      </activation>
      <properties>
        <db.url>jdbc:mysql://prodserver/mydb</db.url>
        <db.username>produser</db.username>
        <db.password>prodpassword</db.password>
      </properties>
    </profile>
  </profiles>
  ...
</settings>

讓我們詳細解釋<profile>元素的主要子元素:

  • <id>Profile的唯一標識符。它用於在命令行或其他配置中引用該Profile
  • <activation>:定義Profile的激活條件。可以通過以下方式激活Profile
    • <activeByDefault>:如果設置為true,則預設激活該Profile
    • <jdk>:根據JDK版本激活Profile
    • <os>:根據操作系統屬性激活Profile
    • <property>:根據Maven屬性的存在或值激活Profile
    • <file>:根據文件的存在或缺失激活Profile
  • <properties>:定義Profile中的屬性。這些屬性可以在POM文件或其他配置中引用。
  • <repositories>:定義Profile特定的倉庫配置。
  • <pluginRepositories>:定義Profile特定的插件倉庫配置。

Profile配置可以在多個級別(如項目的POM文件、用戶的settings.xml文件、全局的settings.xml文件)中定義。當多個級別的Profile配置存在衝突時,會按照優先順序進行合併和覆蓋。
優先順序:POM文件 > 用戶目錄的settings > maven程式conf目錄的settings

activeProfiles

<activeProfiles>部分用於顯式激活指定的Profile。通過在<activeProfiles>中列出Profile的ID,可以強制Maven在構建過程中使用這些Profile的配置,而無需通過其他方式(如命令行參數或激活條件)來激活它們。
下麵是一個<activeProfiles>配置的示例:

<settings>
  ...
  <activeProfiles>
    <activeProfile>development</activeProfile>
    <activeProfile>ci-server</activeProfile>
  </activeProfiles>
  ...
</settings>

所有在<activeProfiles>中列出的Profile都會被激活,無論它們在settings.xml文件中的定義順序如何。
如果多個激活的Profile具有相同的屬性或元素,則後面的Profile會覆蓋前面的Profile的配置。這意味著如果developmentci-server都定義了相同的屬性,則ci-server中的屬性值會覆蓋development中的屬性值。
如果激活的Profile之間沒有衝突的配置,則它們的配置會被合併應用於構建過程。

配置了阿裡雲鏡像的settings

複製下來替換掉自己本地的settings文件即可,包含了常用的配置,如需添加配置可以研究下這篇文章,發現錯誤請評論區指正,謝謝

<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">

  <localRepository>D:/maven_repository/</localRepository>

  <interactiveMode>true</interactiveMode>

  <offline>false</offline>

  <pluginGroups>

  </pluginGroups>

  <proxies>

  </proxies>

  <servers>

  </servers>

  <mirrors>
    <mirror>
      <id>aliyunmaven_central</id>
      <mirrorOf>central</mirrorOf>
      <name>阿裡雲公共倉庫</name>
      <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
      <id>aliyunmaven_public</id>
      <mirrorOf>public</mirrorOf>
      <name>阿裡雲公共倉庫</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>aliyunmaven_apache-snapshots</id>
      <mirrorOf>apache-snapshots</mirrorOf>
      <name>阿裡雲公共倉庫</name>
      <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
      <id>aliyun_spring</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repository>
        <id>spring</id>
        <url>https://maven.aliyun.com/repository/spring</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
      </repository>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>aliyun_spring</activeProfile>
  </activeProfiles>
</settings>

附言

寫這篇文章時好多不懂的地方我都是使用Claude-3-opus查的,不得不說現在的大模型是真的牛,Claude官方宣稱超越了chatGPT4.0,目前只用了接近一個月,體驗非常好,不限制使用頻率,回覆的準確率很高,讓分析個代碼寫個代碼都沒問題,感謝科技進步。
另外有想一起討論chatGPT、Claude大模型的同學可以加我微信:_3306aigc,我們一起進步。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 操作系統 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 Python版本:3.9.12 進行FreeSWITCH會議室相關功能開發過程中,會遇到需要解析會議室列表信息併進行特定操作的情況,比如設置特定通道變數、發送dtmf、錄音等。今天整理下CentOS7環境下,使用Py ...
  • Spirng 當中 Bean的作用域 @目錄Spirng 當中 Bean的作用域每博一文案1. Spring6 當中的 Bean的作用域1.2 singleton 預設1.3 prototype1.4 Spring 中的 bean 標簽當中scope= 屬性其他的值說明1.5 自定義作用域,一個線程 ...
  • title: 深入理解Python多進程:從基礎到實戰 date: 2024/4/29 20:49:41 updated: 2024/4/29 20:49:41 categories: 後端開發 tags: 併發編程 多進程管理 錯誤處理 資源調度 性能優化 非同步編程 Python併發庫 引言 在P ...
  • 本文主要是想給希望開始寫開源項目的同學們一些開源項目維護的實操建議,也算是給自己梳理一下做一個開源項目需要註意的事項。 ...
  • C++ 多態 多態(Polymorphism)是面向對象編程(OOP)的核心概念之一,它允許對象在相同操作下表現出不同的行為。在 C++ 中,多態通常通過繼承和虛函數來實現。 理解多態 想象一個場景,你有一個動物園,裡面有各種動物,如貓、狗、鳥等。每個動物都有自己的叫聲。使用面向對象編程,我們可以創 ...
  • 最近在翻《c++函數式編程》的時候看到有一小節在說c++14新增了“菱形運算符”。我尋思c++里好像沒什麼運算符叫這名字啊,而且c++14新增的功能很少,我也不記得有添加這種語法特性。一瞬間我有些懷疑我的記憶了,所以為了查漏補缺,我寫了這篇文章。 什麼是菱形運算符 這個概念在Java里比較多見: L ...
  • 前言 在實際開發過程中,如果後端需要啟用https訪問,通常項目啟動後配置nginx代理再配置https,前端調用時高版本的chrome還會因為證書未信任導致調用失敗,通過摸索整理一套開發調試下的https方案,特此分享 後端配置 生成HTTPS密鑰 keytool -genkeypair -ali ...
  • 前言 只有自己封裝庫的時候,才知道造輪子有多累。之前使用Python的時候,基本都只需要import,隨便哪個功能都有人寫好輪子用。不過造輪子也有好處,可以瞭解一些比較基礎的知識。 其實aardio也有很多已經造好的輪子可以用,只是因為只有作者在維護,而且沒有一個活躍的社區,所以很多方面有些缺失,比 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...