Files
2026-03-01 01:43:46 +08:00

10 KiB
Raw Permalink Blame History

POM 文件

<parent> 元素

  • 用途:<parent> 元素用于继承父 POM 的配置。通过定义 <parent>,子项目可以继承父 POM 中的插件、依赖管理、属性、构建配置等。
  • 应用场景:适用于多模块项目(multi-module project),其中有一个通用的父项目提供共享的配置和依赖。
  • 继承特性:子项目会继承父项目的依赖管理(dependencyManagement)、插件管理(pluginManagement)等内容,但不会自动继承 <dependencies> 中的依赖。
  • 示例:
<parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
</parent>

<dependency> 元素

  • 用途:<dependency> 元素用于声明当前项目直接依赖的外部库或模块。Maven 会根据这些依赖项自动下载相关的 JAR 文件。
  • 应用场景:适用于项目需要使用外部库或其他模块时,直接声明依赖。
  • 继承特性:它不会继承,而是直接在当前项目中生效。
  • 示例:
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.10</version>
    </dependency>
</dependencies>

Settings 文件

阿里云公共仓库

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>central</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

私服搭建(Docker

拉取并运行 Nexus 容器

  1. 创建一个目录来存储 Nexus 数据
mkdir -p /opt/nexus-data
chmod -R 777 /opt/nexus-data
ls -ld /opt/nexus-data
  1. 拉取并运行 Nexus Docker 镜像
docker run -d -p 8081:8081 --name nexus --restart unless-stopped -v /opt/nexus-data:/nexus-data sonatype/nexus3
  • -d 选项表示以后台模式运行容器。
  • -p 8081:8081 将容器的 8081 端口映射到主机的 8081 端口。
  • --name nexus 给容器命名为 nexus
  • -v ~/nexus-data:/nexus-data 将主机上的目录 ~/nexus-data 挂载到容器内的 /nexus-data,用于持久化数据。

访问 Nexus

Nexus 启动后,可以通过浏览器访问 http://<your-ip>:8081。初始页面可能需要一段时间加载,因为 Nexus 需要一些时间来初始化数据。

配置 Nexus

  1. 登录:默认管理员的用户名是 admin。初始密码可以在挂载数据卷的 admin.password 文件中找到:

    cat ~/nexus-data/admin.password
    
  2. 初始设置:首次登录后,根据向导完成基本设置。

个人测试配置

admin
tianzhuo123.

tianzhuo
tianzhuo123.

问题记录

08:20:05 [] [] [] [] [main] ERROR org.springframework.boot.SpringApplication 870 reportFailure - Application run failed
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NoClassDefFoundError: com/google/common/util/concurrent/internal/InternalFutureFailureAccess
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.28.jar:5.3.28]
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.28.jar:5.3.28]
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.28.jar:5.3.28]
	at java.lang.Iterable.forEach(Iterable.java:75) ~[?:1.8.0_431]
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.28.jar:5.3.28]
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.28.jar:5.3.28]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:937) ~[spring-context-5.3.28.jar:5.3.28]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.28.jar:5.3.28]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.15.jar:2.5.15]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780) ~[spring-boot-2.5.15.jar:2.5.15]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453) ~[spring-boot-2.5.15.jar:2.5.15]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343) ~[spring-boot-2.5.15.jar:2.5.15]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370) ~[spring-boot-2.5.15.jar:2.5.15]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359) ~[spring-boot-2.5.15.jar:2.5.15]
	at com.cmcc.cdn.platform.BootApplication.main(BootApplication.java:57) ~[classes/:?]
Caused by: java.lang.NoClassDefFoundError: com/google/common/util/concurrent/internal/InternalFutureFailureAccess
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_431]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_431]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_431]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[?:1.8.0_431]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_431]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_431]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_431]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_431]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_431]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_431]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_431]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_431]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_431]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[?:1.8.0_431]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_431]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_431]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_431]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_431]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_431]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_431]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_431]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_431]
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_431]
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[?:1.8.0_431]
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_431]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_431]
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_431]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_431]
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_431]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_431]
	at com.google.common.cache.LocalCache$LoadingValueReference.<init>(LocalCache.java:3512) ~[guava-32.1.2-jre.jar:?]
	at com.google.common.cache.LocalCache$LoadingValueReference.<init>(LocalCache.java:3516) ~[guava-32.1.2-jre.jar:?]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2169) ~[guava-32.1.2-jre.jar:?]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2080) ~[guava-32.1.2-jre.jar:?]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4012) ~[guava-32.1.2-jre.jar:?]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4035) ~[guava-32.1.2-jre.jar:?]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5013) ~[guava-32.1.2-jre.jar:?]
	at springfox.documentation.schema.CachingModelProvider.modelFor(CachingModelProvider.java:59) ~[springfox-schema-2.9.2.jar:null]
	at springfox.documentation.spring.web.scanners.ApiModelReader.read(ApiModelReader.java:69) ~[springfox-spring-web-2.9.2.jar:null]
	at springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:133) ~[springfox-spring-web-2.9.2.jar:null]
	at springfox.documentation.spring.web.scanners.ApiDocumentationScanner.scan(ApiDocumentationScanner.java:71) ~[springfox-spring-web-2.9.2.jar:null]
	at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.scanDocumentation(DocumentationPluginsBootstrapper.java:101) ~[springfox-spring-web-2.9.2.jar:null]
	at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:167) ~[springfox-spring-web-2.9.2.jar:null]
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.28.jar:5.3.28]
	... 14 more
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.internal.InternalFutureFailureAccess
	at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_431]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:359) ~[?:1.8.0_431]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_431]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_431]
因为拉下来的 POM 存在问题。

可以把中央镜像仓库放在前边。优先中央镜像。