当前位置: 首页 > 知识库问答 >
问题:

spring boot starter jetty和jetty模块-Maven magic

鲜于宜修
2023-03-14

我们在maven pom中使用spring boot starter jetty,这意味着我们对jetty没有任何直接依赖,因此无法控制其版本。

这一切都很好,但我们现在需要在jetty的一个模块上添加一个依赖项,这些模块使用相同的jetty版本约定。

这一切都很棒,但是因为我们不能使用spring-boot-starter-jetty作为我们的根pom,所以我们在模块的依赖声明下再次声明jetty的版本,如下所示:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jetty</artifactId>
   <version>1.4.3-RELEASE</version>
</dependency>
<dependency>
   <groupId>org.eclipse.jetty</groupId>
   <artifactId>jetty-nosql</artifactId>
   <version>9.3.14.v20161028</version>
</dependency>

这一点都不好玩,而且很危险,因为如果我们升级其中一个,我们必须记住将后者升级到相同的版本。

我知道我们可以在模块的依赖项下添加一个exclude,但这感觉像是黑客升级,仍然不能完全保护我们免受破坏性更改的影响。

有没有从Spring Boot中提取jetty版本并将其重用为模块的依赖项?

谢谢

共有1个答案

颜永怡
2023-03-14

Maven在有效POM中为其依赖项创建版本属性。对于码头,它是jetty。版本

所以你的依赖性会变成

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-nosql</artifactId>
        <version>${jetty.version}</version>
    </dependency>

这是完整的POM

<?xml version="1.0" encoding="UTF-8"?>
<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>TestDependency</groupId>
    <artifactId>TestDependency</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>TestDependency</name>
    <description>TestDependency</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-nosql</artifactId>
            <version>${jetty.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

值得指出的是,最新版本的Spring Boot不需要这样做。我用<代码>1.5.4进行了检查。释放。以下是足够的。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-nosql</artifactId>
    </dependency>

完成POM

<?xml version="1.0" encoding="UTF-8"?>
<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>TestDependency</groupId>
    <artifactId>TestDependency</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>TestDependency</name>
    <description>TestDependency</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-nosql</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

使用以下命令可以生成有效的POM

mvn help:effective-pom

或者,如果您使用的是Spring工具套件或最新版本的Eclipse,那么您可以直接在Maven POM编辑器的底部选项卡中进行检查

编辑

如果没有spring-boot父pom,可以使用依赖管理完成相同的操作

以下是没有spring boot父级的完整pom

<?xml version="1.0" encoding="UTF-8"?>
<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>TestDependency</groupId>
    <artifactId>TestDependency</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>TestDependency</name>
    <description>TestDependency</description>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>1.4.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-nosql</artifactId>
            <version>${jetty.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
 类似资料:
  • author: Wuxiaolong 在Python中有一些内置的数据类型,比如int, str, list, tuple, dict等。Python的collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:namedtuple, defaultdict, deque, Counter, OrderedDict等,其中defaultdict和namedtuple是两个很实用

  • 1、主模块和非主模块的定义 在 Python 函数中,如果一个函数调用了其他函数完成一项功能,我们称这个函数为主函数,如果一个函数没有调用其他函数,我们称这种函数为非主函数。主模块和非主模块的定义也类似,如果一个模块被直接使用,而没有被别人调用,我们称这个模块为主模块,如果一个模块被别人调用,我们称这个模块为非主模块。 2、name 属性 在 Python 中,有主模块和非主模块之分,当然,我们也

  • 包(crate) Rust 中,crate 是一个独立的可编译单元。具体说来,就是一个或一批文件(如果是一批文件,那么有一个文件是这个 crate 的入口)。它编译后,会对应着生成一个可执行文件或一个库。 执行 cargo new foo,会得到如下目录层级: foo ├── Cargo.toml └── src └── lib.rs 这里,lib.rs 就是一个 crate(入口),它编

  • 问题内容: 我刚刚开始在我的Java类中使用from,它很棒!但是,如果尝试包含python模块(,等),则会收到以下异常(用于): 如何从jython jar中使类“查看” python可用的模块? 问题答案: 您嵌入了jython,将使用一些Python模块: 如果要在Java代码中设置路径(sys.path): Py在org.python.core中。 rootPath和modulesDir

  • 主要内容:实例,BEGIN 和 END 模块,实例,什么是 Perl 模块?,实例,Require 和 Use 函数,实例,实例,创建 Perl 模块,安装 Perl 模块Perl 中每个包有一个单独的符号表,定义语法为: 此语句定义一个名为 mypack 的包,在此后定义的所有变量和子程序的名字都存贮在该包关联的符号表中,直到遇到另一个 package 语句为止。 每个符号表有其自己的一组变量、子程序名,各组名字是不相关的,因此可以在不同的包中使用相同的变量名,而代表的是不同的变量。 从一个包

  • 食氧;视窗7;JDK 9决赛从9日开始,21日结束;JUnit4.12和现有的应用程序。作为起点,可以编译、执行应用程序,并且所有JUnit测试都显示为绿色。现在我们使用eclipse生成文件模块信息。JAVA结果是: 但有一个错误:junit无法解析为模块。问题是:如何告诉文件junit没有定义任何模块,应该在兼容模式下运行?