182 lines
10 KiB
Markdown
182 lines
10 KiB
Markdown
# POM 文件
|
||
|
||
## `<parent>` 元素
|
||
|
||
- 用途:`<parent>` 元素用于继承父 POM 的配置。通过定义 `<parent>`,子项目可以继承父 POM 中的插件、依赖管理、属性、构建配置等。
|
||
- 应用场景:适用于多模块项目(multi-module project),其中有一个通用的父项目提供共享的配置和依赖。
|
||
- 继承特性:子项目会继承父项目的依赖管理(dependencyManagement)、插件管理(pluginManagement)等内容,但不会自动继承 `<dependencies>` 中的依赖。
|
||
- 示例:
|
||
|
||
```xml
|
||
<parent>
|
||
<groupId>com.example</groupId>
|
||
<artifactId>parent-project</artifactId>
|
||
<version>1.0.0</version>
|
||
</parent>
|
||
```
|
||
|
||
## `<dependency>` 元素
|
||
|
||
- 用途:`<dependency>` 元素用于声明当前项目直接依赖的外部库或模块。Maven 会根据这些依赖项自动下载相关的 JAR 文件。
|
||
- 应用场景:适用于项目需要使用外部库或其他模块时,直接声明依赖。
|
||
- 继承特性:它不会继承,而是直接在当前项目中生效。
|
||
- 示例:
|
||
|
||
```xml
|
||
<dependencies>
|
||
<dependency>
|
||
<groupId>org.springframework</groupId>
|
||
<artifactId>spring-core</artifactId>
|
||
<version>5.3.10</version>
|
||
</dependency>
|
||
</dependencies>
|
||
```
|
||
|
||
# Settings 文件
|
||
|
||
## 阿里云公共仓库
|
||
|
||
```xml
|
||
<mirror>
|
||
<id>aliyunmaven</id>
|
||
<mirrorOf>central</mirrorOf>
|
||
<name>阿里云公共仓库</name>
|
||
<url>https://maven.aliyun.com/repository/public</url>
|
||
</mirror>
|
||
```
|
||
|
||
# 私服搭建(Docker)
|
||
|
||
## 拉取并运行 Nexus 容器
|
||
|
||
1. **创建一个目录来存储 Nexus 数据**
|
||
|
||
```bash
|
||
mkdir -p /opt/nexus-data
|
||
chmod -R 777 /opt/nexus-data
|
||
ls -ld /opt/nexus-data
|
||
```
|
||
|
||
1. **拉取并运行 Nexus Docker 镜像**
|
||
|
||
```bash
|
||
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` 文件中找到:
|
||
|
||
```bash
|
||
cat ~/nexus-data/admin.password
|
||
```
|
||
|
||
2. **初始设置**:首次登录后,根据向导完成基本设置。
|
||
|
||
## 个人测试配置
|
||
|
||
```
|
||
admin
|
||
tianzhuo123.
|
||
|
||
tianzhuo
|
||
tianzhuo123.
|
||
```
|
||
|
||
# 问题记录
|
||
|
||
```log
|
||
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 存在问题。
|
||
```
|
||
|
||

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