Maven的三种关系:继承,聚合,依赖

【UV打印机】RYPC打印软件教程(二)-软件界面概述 下图是控制软件的主操作界面.将喷绘机的操作规纳为四块,分别为参数设置,任务选择,打印控制,系统维护,对于日常打印而言,只需操作任务选择,打印控制。从而使汲及的操作相对较少,使得系统对普通用户而言简单易用. 阅读详情

6.1     简介

       pom.xml文件是Maven进行工作的主要配置文件。在这个文件中我们可以配置Maven项目的groupId、artifactId和version等Maven项目必须的元素;可以配置Maven项目需要使用的远程仓库;可以定义Maven项目打包的形式;可以定义Maven项目的资源依赖关系等等。对于一个最简单的pom.xml的定义必须包含modelVersion、groupId、artifactId和version这四个元素,当然这其中的元素也是可以从它的父项目中继承的。在Maven中,使用groupId、artifactId和version组成groupdId:artifactId:version的形式来唯一确定一个项目。

6.2     pom.xml的继承、聚合与依赖

       我们知道Maven在建立项目的时候是基于Maven项目下的pom.xml进行的,我们项目依赖的信息和一些基本信息都是在这个文件里面定义的。那如果当我们有多个项目要进行,这多个项目有些配置内容是相同的,有些是要彼此关联的,那如果按照传统的做法的话我们就需要在多个项目中都定义这些重复的内容。这无疑是非常耗费时间和不易维护的。好在Maven给我们提供了一个pom的继承和聚合的功能。

       对于使用java的人而言,继承这个词大家应该都不陌生。要继承pom就需要有一个父pom,在Maven中定义了超级pom.xml,任何没有申明自己父pom.xml的pom.xml都将默认继承自这个超级pom.xml。

       先来看一下这个超级pom.xml的定义:

<project>  
  <modelVersion>4.0.0</modelVersion>  
  <name>Maven Default Project</name>  
   
  <repositories>  
    <repository>  
      <id>central</id>  
      <name>Maven Repository Switchboard</name>  
      <layout>default</layout>  
      <url>http://repo1.maven.org/maven2</url>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
    </repository>  
  </repositories>  
   
  <pluginRepositories>  
    <pluginRepository>  
      <id>central</id>  
      <name>Maven Plugin Repository</name>  
      <url>http://repo1.maven.org/maven2</url>  
      <layout>default</layout>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
      <releases>  
        <updatePolicy>never</updatePolicy>  
      </releases>  
    </pluginRepository>  
  </pluginRepositories>  
   
  <build>  
    <directory>${project.basedir}/target</directory>  
    <outputDirectory>${project.build.directory}/classes</outputDirectory>  
    <finalName>${project.artifactId}-${project.version}</finalName>  
    <testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>  
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>  
    <!-- TODO: MNG-3731 maven-plugin-tools-api < 2.4.4 expect this to be relative... -->  
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>  
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>  
    <resources>  
      <resource>  
        <directory>${project.basedir}/src/main/resources</directory>  
      </resource>  
    </resources>  
    <testResources>  
      <testResource>  
        <directory>${project.basedir}/src/test/resources</directory>  
      </testResource>  
    </testResources>  
   <pluginManagement>  
       <plugins>  
         <plugin>  
           <artifactId>maven-antrun-plugin</artifactId>  
           <version>1.3</version>  
         </plugin>        
         <plugin>  
           <artifactId>maven-assembly-plugin</artifactId>  
           <version>2.2-beta-2</version>  
         </plugin>          
         <plugin>  
           <artifactId>maven-clean-plugin</artifactId>  
           <version>2.2</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-compiler-plugin</artifactId>  
           <version>2.0.2</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-dependency-plugin</artifactId>  
           <version>2.0</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-deploy-plugin</artifactId>  
           <version>2.4</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-ear-plugin</artifactId>  
           <version>2.3.1</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-ejb-plugin</artifactId>  
           <version>2.1</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-install-plugin</artifactId>  
           <version>2.2</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-jar-plugin</artifactId>  
           <version>2.2</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-javadoc-plugin</artifactId>  
           <version>2.5</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-plugin-plugin</artifactId>  
           <version>2.4.3</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-rar-plugin</artifactId>  
           <version>2.2</version>  
         </plugin>         
         <plugin>                 
           <artifactId>maven-release-plugin</artifactId>  
           <version>2.0-beta-8</version>  
         </plugin>  
         <plugin>                  
           <artifactId>maven-resources-plugin</artifactId>  
           <version>2.3</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-site-plugin</artifactId>  
           <version>2.0-beta-7</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-source-plugin</artifactId>  
           <version>2.0.4</version>  
         </plugin>          
         <plugin>  
            <artifactId>maven-surefire-plugin</artifactId>  
            <version>2.4.3</version>  
         </plugin>  
         <plugin>  
           <artifactId>maven-war-plugin</artifactId>  
           <version>2.1-alpha-2</version>  
         </plugin>  
       </plugins>  
     </pluginManagement>  
  </build>  
   
  <reporting>  
    <outputDirectory>${project.build.directory}/site</outputDirectory>  
  </reporting>  
  <profiles>  
    <profile>  
      <id>release-profile</id>  
   
      <activation>  
        <property>  
          <name>performRelease</name>  
          <value>true</value>  
        </property>  
      </activation>  
   
      <build>  
        <plugins>  
          <plugin>  
            <inherited>true</inherited>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-source-plugin</artifactId>  
            <executions>  
              <execution>  
                <id>attach-sources</id>  
                <goals>  
                  <goal>jar</goal>  
                </goals>  
              </execution>  
            </executions>  
          </plugin>  
          <plugin>  
            <inherited>true</inherited>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-javadoc-plugin</artifactId>  
            <executions>  
              <execution>  
                <id>attach-javadocs</id>  
                <goals>  
                  <goal>jar</goal>  
                </goals>  
              </execution>  
            </executions>  
          </plugin>  
          <plugin>  
            <inherited>true</inherited>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-deploy-plugin</artifactId>  
            <configuration>  
              <updateReleaseInfo>true</updateReleaseInfo>  
            </configuration>  
          </plugin>  
        </plugins>  
      </build>  
    </profile>  
  </profiles>  
   
</project>  


       对于一个pom.xml来说有几个元素是必须定义的,一个是project根元素,然后就是它里面的modelVersion、groupId、artifactId和version。由上面的超级pom.xml的内容我们可以看到pom.xml中没有groupId、artifactId和version的定义,所以我们在建立自己的pom.xml的时候就需要定义这三个元素。和java里面的继承类似,子pom.xml会完全继承父pom.xml中所有的元素,而且对于相同的元素,一般子pom.xml中的会覆盖父pom.xml中的元素,但是有几个特殊的元素它们会进行合并而不是覆盖。这些特殊的元素是:

Ø  dependencies

Ø  developers

Ø  contributors

Ø  plugin列表,包括plugin下面的reports

Ø  resources

6.2.1继承

6.2.1.1被继承项目与继承项目是父子目录关系

       现在假设我们有一个项目projectA,它的pom.xml定义如下:

Xml代码    收藏代码

 

<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>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>  
</project>  

       然后我们有另一个项目projectB,而且projectB是跟projectA的pom.xml文件处于同一个目录下,这时候如果projectB需要继承自projectA的话我们可以这样定义projectB的pom.xml文件。

<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">  
  <parent>  
    <groupId>com.tiantian.mavenTest</groupId>  
    <artifactId>projectA</artifactId>  
    <version>1.0-SNAPSHOT</version>  
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>  
</project>  


       由projectB的pom.xml文件的定义我们可以知道,当需要继承指定的一个Maven项目时,我们需要在自己的pom.xml中定义一个parent元素,在这个元素中指明需要继承项目的groupId、artifactId和version。

6.2.1.2被继承项目与继承项目的目录结构不是父子关系

       当被继承项目与继承项目的目录结构不是父子关系的时候,我们再利用上面的配置是不能实现Maven项目的继承关系的,这个时候我们就需要在子项目的pom.xml文件定义中的parent元素下再加上一个relativePath元素的定义,用以描述父项目的pom.xml文件相对于子项目的pom.xml文件的位置。

       假设我们现在还是有上面两个项目,projectA和projectB,projectB还是继承自projectA,但是现在projectB不在projectA的子目录中,而是与projectA处于同一目录中。这个时候projectA和projectB的目录结构如下:

       ------projectA

              ------pom.xml

       ------projectB

              ------pom.xml

       这个时候我们可以看出projectA的pom.xml相对于projectB的pom.xml的位置是“../projectA/pom.xml”,所以这个时候projectB的pom.xml的定义应该如下所示:

<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">  
  <parent>  
    <groupId>com.tiantian.mavenTest</groupId>  
    <artifactId>projectA</artifactId>  
    <version>1.0-SNAPSHOT</version>  
       <relativePath>../projectA/pom.xml</relativePath>  
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>  
</project>  


6.2.2聚合

       对于聚合这个概念搞java的人应该都不会陌生。先来说说我对聚合和被聚合的理解,比如说如果projectA聚合到projectB,那么我们就可以说projectA是projectB的子模块, projectB是被聚合项目,也可以类似于继承那样称为父项目。对于聚合而言,这个主体应该是被聚合的项目。所以,我们需要在被聚合的项目中定义它的子模块,而不是像继承那样在子项目中定义父项目。具体做法是:

Ø  修改被聚合项目的pom.xml中的packaging元素的值为pom

Ø  在被聚合项目的pom.xml中的modules元素下指定它的子模块项目

对于聚合而言,当我们在被聚合的项目上使用Maven命令时,实际上这些命令都会在它的子模块项目上使用。这就是Maven中聚合的一个非常重要的作用。假设这样一种情况,你同时需要打包或者编译projectA、projectB、projectC和projectD,按照正常的逻辑我们一个一个项目去使用mvn compile或mvn package进行编译和打包,对于使用Maven而言,你还是这样使用的话是非常麻烦的。因为Maven给我们提供了聚合的功能。我们只需要再定义一个超级项目,然后在超级项目的pom.xml中定义这个几个项目都是聚合到这个超级项目的。之后我们只需要对这个超级项目进行mvn compile,它就会把那些子模块项目都进行编译。

6.2.2.1被聚合项目和子模块项目在目录结构上是父子关系

还拿上面定义的projectA和projectB来举例子,现在假设我们需要把projectB聚合到projectA中。projectA和projectB的目录结构如下所示:

------projectA

       ------projectB

              -----pom.xml

       ------pom.xml

这个时候projectA的pom.xml应该这样定义:

 

<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/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  <modules>  
       <module>projectB</module>  
  </modules>  
</project>  


  

 

由上面的定义我们可以看到被聚合的项目的packaging类型应该为pom,而且一个项目可以有多个子模块项目。对于聚合这种情况,我们使用子模块项目的artifactId来作为module的值,表示子模块项目相对于被聚合项目的地址,在上面的示例中就表示子模块projectB是处在被聚合项目的子目录下,即与被聚合项目的pom.xml处于同一目录。这里使用的module值是子模块projectB对应的目录名projectB,而不是子模块对应的artifactId。这个时候当我们对projectA进行mvn package命令时,实际上Maven也会对projectB进行打包。

6.2.2.2被聚合项目与子模块项目在目录结构上不是父子关系

那么当被聚合项目与子模块项目在目录结构上不是父子关系的时候,我们应该怎么来进行聚合呢?还是像继承那样使用relativePath元素吗?答案是非也,具体做法是在module元素中指定以相对路径的方式指定子模块。我们来看下面一个例子。

继续使用上面的projectA和projectB,还是需要把projectB聚合到projectA,但是projectA和projectB的目录结构不再是父子关系,而是如下所示的这种关系:

------projectA

       ------pom.xml

------projectB

       ------pom.xml

这个时候projectA的pom.xml文件就应该这样定义:

 

<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/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
   
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  <modules>  
       <module>../projectB</module>  
  </modules>  
</project>  

  

 

注意看module的值是“../projectB”,我们知道“..”是代表当前目录的上层目录,所以它表示子模块projectB是被聚合项目projectA的pom.xml文件所在目录(即projectA)的上层目录下面的子目录,即与projectA处于同一目录层次。注意,这里的projectB对应的是projectB这个项目的目录名称,而不是它的artifactId。

6.2.2.3聚合与继承同时进行

       假设有这样一种情况,有两个项目,projectA和projectB,现在我们需要projectB继承projectA,同时需要把projectB聚合到projectA。然后projectA和projectB的目录结构如下:

       ------projectA

              ------pom.xml

       ------projectB

              ------pom.xml

       那么这个时候按照上面说的那样,projectA的pom.xml中需要定义它的packaging为pom,需要定义它的modules,所以projectA的pom.xml应该这样定义:

 

<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/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  <modules>  
       <module>../projectB</module>  
  </modules>  
</project>  

       而projectB是继承自projectA的,所以我们需要在projectB的pom.xml文件中新增一个parent元素,用以定义它继承的项目信息。所以projectB的pom.xml文件的内容应该这样定义:

<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/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <parent>  
       <groupId>com.tiantian.mavenTest</groupId>  
       <artifactId>projectA</artifactId>  
       <version>1.0-SNAPSHOT</version>  
       <relativePath>../projectA/pom.xml</relativePath>  
  </parent>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>jar</packaging>  
</project>  


6.2.3依赖Dependency

       项目之间的依赖是通过pom.xml文件里面的dependencies元素下面的dependency元素进行的。一个dependency元素定义一个依赖关系。在dependency元素中我们主要通过依赖项目的groupId、artifactId和version来定义所依赖的项目。

       先来看一个简单的项目依赖的示例吧,假设我现在有一个项目projectA,然后它里面有对junit的依赖,那么它的pom.xml就类似以下这个样子:

<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/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>jar</packaging>  
   
  <dependencies>  
    <dependency>  
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>3.8.1</version>  
      <scope>test</scope>  
              <optional>true</optional>  
    </dependency>  
  </dependencies>  
</project>  

 

       在dependency元素中除了可以指定依赖项目的groupId、artifactId和version之外,还可以指定以下元素:

Ø  type:对应于依赖项目的packaging类型,默认是jar

Ø  scope:表示依赖项目的一个作用范围。scope的主要取值范围如下(还有一个是在Maven2.0.9以后版本才支持的import,关于import作用域将在后文《Dependency介绍》中做介绍):

n  compile:这是它的默认值,这种类型很容易让人产生误解,以为只有在编译的时候才是需要的,其实这种类型表示所有的情况都是有用的,包括编译和运行时。而且这种类型的依赖性是可以传递的。

n  provided:这个跟compile很类似,但是它表示你期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。

n  runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。

n  test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。

n  system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。

Ø  systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的 jar包的scope为system时才能使用,否则Maven将报错。

Ø  optional:当该项目本身作为其他项目的一个依赖时标记该依赖为可选项。假设现在projectA有一个依赖性projectB,我们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不一定会用到。这个时候如果我们有另一个项目projectC,它依赖于projectA,那么这个时候因为projectB对于projectA是可选的,所以Maven在建立projectC的时候就不会安装projectB,这个时候如果projectC确实需要使用到projectB,那么它就可以定义自己对projectB的依赖。当一个依赖是可选的时候,我们把optional元素的值设为true,否则就不设置optional元素。

Ø  exclusions:考虑这样一种情况,我们的projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,那么这个时候我们就可以在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。这个时候我们可以这样定义projectA对projectB的依赖:

<dependencies>  
     <dependency>  
            <groupId>com.tiantian.mavenTest</groupId>  
            <artifactId>projectB</artifactId>  
            <version>1.0-SNAPSHOT</version>  
            <exclusions>  
                   <exclusion>  
                          <groupId>com.tiantian.mavenTest</groupId>  
                          <artifactId>projectC</artifactId>  
                   </exclusion>  
            </exclusions>  
     </dependency>  
</dependencies>  

 

 

6.3     属性

在pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:

Ø  env.propertyName:这种形式表示引用的是环境变量,比如我们需要引用当前系统的环境变量PATH的时候,就可以使用${env.PATH}。

Ø  project.propertyName:这种形式表示引用的是当前这个pom.xml中project根元素下面的子元素的值。比如我们需要引用当前project下面的version的时候,就可以使用${project.version}。

Ø  settings.propertyName:这种形式引用的是Maven本地配置文件settings.xml或本地Maven安装目录下的settings.xml文件根元素settings下的元素。比如我们需要引用settings下的本地仓库localRepository元素的值时,我们可以用${settings.localRepository}

Ø  java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}。

Ø  pom.xml中properties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld。


如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤 如何修复Windows卡在“正在准备Windows”的问题?这里有详细步骤。 阅读详情

相关推荐

如何把DeepSeek这个奈斯工具接入到Pycharm里

DeepSeek接入到Pycharm中,提高编程效率,以及帮助解决遇到的问题。

学无止境,何以言满 2623

Maven简介(五)——pom.xml

6       Maven的pom.xml介绍 6.1     简介        pom.xml文件是Maven进行工作的主要配置文件。在这个文件中我们可以配置Maven项目的groupId、artifactId和version等Maven项目必须的元素;可以配置Maven项目需要使用的远程仓库;可以定义Maven项目打包的形式;可以定义Maven项目的资源依赖关系等等。对于一个...

Elim的博客 979

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 1974

Maven继承

Maven继承

BlueMiracle 1092

电源工程师必看:平均电流模式BUCK双环控制详解(从传递函数到Psim仿真)

本文详细解析了平均电流模式BUCK变换器的双环控制策略,从传递函数推导到Psim仿真实现。针对电源工程师关注的环路设计和稳定性问题,深入比较了电压模式、峰值电流模式和平均电流模式的优缺点,并提供了12V/3A BUCK变换器的完整设计案例,帮助工程师掌握平均电流控制这一中高功率应用的首选方案。

weixin_42696271的博客 398

【Get深一度】小波分析概念1——紧支撑集是什么意思,通俗解释

最近学到小波,在仿真中也用到了紧支撑函数;紧支撑性越好,说明能量越集中;用最通俗的话来讲,紧支撑是这样的: 对于函数f(x),如果自变量x在 0附近的取值范围内,f(x)能取到 C; 而在此之外,f(x)取值为 0; 那么这个函数f(x)就是紧支

Trey_优快云 的优快云博客 8348

IntelliJ IDEA打开maven工程(只要有pom.xml就行)

https://www.cnblogs.com/ginb/p/7340215.html 一.从版本控制系统(svn / git等)导出一个新maven项目到idea中按照如下方法下载jar包 1.点击1号红框处,打开maven视图窗口(正常情况下maven视图隐藏着idea窗口右侧,点击1号后显示) 2.点击2号或3号红框处选择当前项目中pom.xml文件的位置(如果是全新项目在3号红框处会有加...

qq_42204928的博客 7823

从零开始:如何用大语言模型构建你的第一个路径规划智能体

本文详细介绍了如何利用大语言模型(LLM)构建路径规划智能体,从基础概念到实战案例,涵盖TSP和CVRP问题的解决方案。通过选择合适的LLM模型、设计有效的提示工程和实现自我验证,即使没有运筹学背景也能快速上手。文章还提供了部署与优化智能体的实用技巧,帮助读者在物流配送、机器人导航等领域应用这一技术。

weixin_28256233的博客 488

Maven中的pom.xml文件超详细解析

POM全程,又称项目对象模型。他是Maven工程的基本工作单元,是一个XML(可扩展标记语言)文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等等。执行任务或目标时,Maven会在当前目录中查找 POM并读取从而获取所需的配置信息执行目标,属于项目级别的配置文件。

顺其自然~专栏 1万+

从零开始:使用Python实现基于深度强化学习的柔性车间调度系统

本文详细介绍了如何使用Python和深度强化学习(DRL)构建柔性车间调度系统,特别关注图神经网络(GNN)与近端策略优化(PPO)算法的结合应用。通过实战指南,读者将学习从环境准备、异构图构建到PPO算法实现的全流程,最终实现生产效率的显著提升。

weixin_29074295的博客 244

SpringCloud详细教程(下)

SpringCloud详细教程,springcloud完全教程。Springcloud微服务教程(上)的姊妹篇:介绍了其它SpringCloud组件。

鸟哥哥的专栏 4万+

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

原文:http://blog.youkuaiyun.com/u012152619/article/details/51485297 <!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 --> <modelVersion>4.0.0</modelVersion> <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/

qq_25790855的博客 362

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

Maven--依赖、继承、聚合

1.依赖 A项目的运行或开发需要B项目的支持,则代表A项目依赖B项目,在这种情况下,需要在pom.xml文件中添加依赖关系。 就像项目中需要jar包的支持一样。 <dependency> <groupId>xxxx</groupId> <artifactId>xxxx</artifactI...

xylyaya的博客 193

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Maven基础概述-下篇

约定优于配置:maven的配置文件看似很复杂,其实只需要根据项目的实际背景,设置个别的几个配置项而已。maven有自己的一套默认配置,使用者除非必要,并不需要去修改那些约定内容。这就是所谓的“约定优于配置”。好处:采用"约定优于配置"的策略可以减少修改配置的工作量,也可以降低学习成本,更重要的是,给项目引入了统一的规范。版本规范:maven有自己的版本规范,一般是如下定义: <ma...

dianzhouxia2784的博客 129

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

maven基础一

介绍maven目录 maven项目的关系 三种关系:依赖关系、继承关系、聚合关系。 聚合项目和继承项目的关系 父项目中的一些其他知识点 代码演示: &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...

曹学成的博客 209

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

07 Maven高级:01.maven分模块构建(下)

01.maven分模块构建 01maven高级应用课程介绍、02maven基础知识回顾、03案例环境准备、04maven导入jar包时冲突的解决 05pom文件内标签的讲解、06案例dao层代码编写、07案例service层代码编写、08案例web层代码编写 09maven工程拆分与聚合的思想、10maven父子工程的创建、11工程和模块的关系以及继承和依赖的概念 12传递依赖下来的包是...

Marlon康 211

在eclipse中使用Maven分模块搭建SSM框架,创建jar、war、pom工程模块教学,项目的热部署,需要的可以留下邮箱,给大家发整理过的Maven笔记...

第一章:Maven概述 (1)Maven是一个项目构建工具,由apache提供,用Java开发的 (2)构建工具:Ant(蚂蚁),Maven(专家) (3)构建工具作用:帮助程序员进行项目的创建,目录的创建、代码的编译,执行,测试,打包... (4)传统构建的缺陷: a:项目之间的依赖不方便,只能通过导包的形式建立关联 b:不能实时更新代码 ...

weixin_30924239的博客 516

Maven:

优点: 1.简化了项目依赖管理:jar包管理,防止了冲突 2.便于与持续集成工具(jenkins)整合 3.便于项目升级,无论是项目本身升级还是项目使用的依赖升级。 4.有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。 5.maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等 Maven项目类型: jar: java工程, 项目最终被打包为jar包 war: web工程, 项目被打包为war包 pom: 逻辑工程, 父工程必须是pom类型的

csdndd521的博客 175

Maven

在聚合项目中使用。聚合项目中如果一个项目为父项目,项目类型应该为pom类型。当项目类型为pom类型时,表示该项目除了会配置pom.xml以外不会有任何其他类或资源文件。打包时除了src中内容,还会包含webapp目录,要比jar类型文件打包的内容更多。相当于我们之前使用idea创建的java项目。打包主要打包java文件。可以使得非.java文件在编译后依然保留。在pom.xml文件中加入以下内容。下面就是让所有的.txt文件保留。webapp:页面文件。test:测试类文件。

weixin_53455615的博客 729

Maven多模块项目管理:基于SpringBoot单体项目的继承与聚合实战指南

本文系统讲解了Maven在SpringBoot单体项目中的多模块管理,主要内容包括: Maven继承与聚合机制:详解父POM配置、继承关系及packaging必须设为pom的原因; SpringBoot依赖管理:对比Parent与BOM方式的版本控制策略,解析核心starter的功能; 实战项目构建:演示典型的多模块项目结构设计,包含公共模块、数据层、业务层和Web层的完整配置方案。 通过合理的模块划分和依赖管理,可实现代码复用、统一版本控制和便捷的项目维护。文章提供了完整的POM配置示例,帮助开发者快速搭

LI_124301012的博客 996

Maven项目的依赖、继承、聚合关系

目录1.父项目的搭建2.子项目的搭建(继承关系)3.子项目的搭建(聚合关系)4.优雅的使用聚合关系管理jar包版本 1.父项目的搭建 新建一个Maven Project 勾选创建简单项目 编辑项目信息 以创建一个淘宝项目为例。 Group Id写公司名字 Artifact Id写父项目名或子模块名 Version写版本号 以上三个属性为一个项目的坐标,通过这个坐标即可定位一个项目。 P...

GENIUSROAD的博客 4232

【Maven】基于IDEA学习 Maven依赖 与 工程继承、聚合关系

详细讲解Maven依赖的相关知识,以及工程的继承、聚合关系

August_._的博客 1173

Maven的依赖管理、传递、冲突、父子工程的继承和聚合

Maven的依赖管理、传递、冲突、父子工程的继承和聚合

雷神乐乐的博客 2349

[Maven] 分模块开发——依赖的传递、聚合、继承

在Maven中,分模块开发是指将一个大型项目拆分为多个独立的模块或子项目,每个模块可以单独构建、测试和部署。这种模块化的开发方式有助于提高项目的可维护性、可扩展性和复用性。在Maven中,可以通过在项目的根目录下创建多个子模块(子项目)来实现分模块开发。每个子模块都有自己的pom.xml文件,用于定义该模块的依赖、构建配置等信息。父项目的pom.xml文件可以使用标签来列出所有子模块,以便Maven能够统一管理这些模块的构建过程。

m0_61632590的博客 2184

【Maven】007-Maven 工程的继承和聚合关系

父工程通过这样的声明,就建立了与子模块的。等信息,从而减少冗余配置,提高项目的可维护性。子工程通过这样的声明,就建立了与父工程的。Maven 支持工程之间的继承关系,其中。这种继承关系允许子工程继承父工程的。Maven 聚合是指。

訾博(ZiBo)的博客 1274
上一篇: 关于Maven导入oracle jar包的步骤
下一篇: Android studio导入第三方类库
simon麦田
博客等级 码龄11年 7粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值