# java编辑及测试
## 清理项目,重新构建
```bash
mvn -pl xxxx-web -am clean compile -P '!consul-dc'
mvn -pl xxxx-web -am compile -P '!consul-dc'
mvn -pl xxxx-job -am compile -P '!consul-dc'
```
## 针对测试类中有main方法需要运行的, 启动时也需要带上 target/test-class
```bash
mvn -pl xxxx-web test-compile -P '!consul-dc'
mvn -pl xxxx-job test-compile -P '!consul-dc'
```
## 如果某个依赖模块有profile 想排除的,则需要先构建
```bash
mvn -pl xxxx-common -am compile -P '!quartz'
mvn -pl xxxx-common -P '!quartz' -q dependency:build-classpath "-Dscope=runtime" "-DexcludeGroupIds=com.xxxx" "-Dmdep.outputFile=classpath.txt"
```
## 生成classpath 字符串
```bash
mvn -pl xxxx-web -P '!consul-dc' -q dependency:build-classpath "-Dscope=runtime" "-DexcludeGroupIds=com.xxxx" "-Dmdep.outputFile=classpath.txt"
mvn -pl xxxx-job -P '!consul-dc' -q dependency:build-classpath "-Dscope=runtime" "-DexcludeGroupIds=com.xxxx" "-Dmdep.outputFile=classpath.txt"
```
## 测试相关
```bash
# 单元测试不需要接入中间件
# api测试需要接入中间件-所以使用testcontainers来隔离实际中间件
# 单元测试、api测试
mvn -pl xxx-web -am test "-Dsurefire.failIfNoSpecifiedTests=false" "-DfailIfNoTests=false"
# 集成测试使用testcontainers来隔离实际中间件
# 验收测试使用真实中间件
# 集成测试、验收测试
mvn -pl change-robot-web -am failsafe:integration-test failsafe:verify "-Dit.test=UnifiedDataServiceIntegrationTest" "-DfailIfNoTests=false"
```
## 执行调试
```bash
# xxxx-web
$env:HOSTNAME = 'jin' & java "-Dfile.encoding=UTF-8" "-Dspring.quartz.auto-startup=false" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5045 -cp "xxxx-web/target/classes;xxxx-dal/target/classes;xxxx-model/target/classes;xxxx-service/target/classes;xxxx-util/target/classes;xxxx-common/target/classes;xxxx-agent/target/classes;$(cat xxxx-web/classpath.txt)" com.xxxx.XxxxxWebApplication
# xxxx-job
$env:HOSTNAME = 'jin' & java "-Dairobot.devCallbackData=true" "-Dmybatis-plus.configuration.log-impl = org.apache.ibatis.logging.stdout.StdOutImpl" "-Dfile.encoding=UTF-8" "-Dnwd.job.enabled=false" "-Dspring.quartz.auto-startup=false" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5025 -cp "xxxx-job/target/classes;xxxx-dal/target/classes;xxxx-model/target/classes;xxxx-service/target/classes;xxxx-util/target/classes;xxxx-common/target/classes;$(cat xxxx-job/classpath.txt)" com.xxxx.XxxxxJobApplication
```bash
## 只运行不调试
```bash
# xxxx-web
$env:HOSTNAME = 'jin' & java "-Dfile.encoding=UTF-8" "-Dspring.quartz.auto-startup=false" -cp "xxxx-web/target/classes;xxxx-dal/target/classes;xxxx-model/target/classes;xxxx-service/target/classes;xxxx-util/target/classes;xxxx-common/target/classes;xxxx-agent/target/classes;$(cat xxxx-web/classpath.txt)" com.xxxx.XxxxxWebApplication
# xxxx-job
$env:HOSTNAME = 'jin' & java "-Dmybatis-plus.configuration.log-impl = org.apache.ibatis.logging.stdout.StdOutImpl" "-Dfile.encoding=UTF-8" "-Dnwd.job.enabled=false" "-Dspring.quartz.auto-startup=false" -cp "xxxx-job/target/classes;xxxx-dal/target/classes;xxxx-model/target/classes;xxxx-service/target/classes;xxxx-util/target/classes;xxxx-common/target/classes;$(cat xxxx-job/classpath.txt)" com.xxxx.XxxxxJobApplication
```
## 只编译一些单一模块的类,加速编译时间
```bash
# xxxx-web
javac -encoding "UTF-8" -cp " \
xxxx-web/src/main/java; \
xxxx-dal/target/classes; \
xxxx-model/target/classes; \
xxxx-service/target/classes; \
xxxx-util/target/classes; \
xxxx-common/target/classes; \
xxxx-agent/target/classes; \
$(cat xxxx-web/classpath.txt)" -d "xxxx-web/target/classes" xxxx-web/src/main/java/
# xxxx-model
javac -encoding "UTF-8" -cp " \
xxxx-model/src/main/java; \
$(cat xxxx-web/classpath.txt)" -d "xxxx-web/target/classes" xxxx-model/src/main/java/
# xxxx-service
javac -encoding "UTF-8" -cp " \
xxxx-dal/target/classes; \
xxxx-model/target/classes; \
xxxx-service/target/classes; \
xxxx-util/target/classes; \
xxxx-common/target/classes; \
$(cat xxxx-web/classpath.txt)" -d "xxxx-service/target/classes" xxxx-service/src/main/java/
```
---
## 将项目子模块 install到本地仓库
```bash
# 清理项目,重新构建
mvn -pl xxxx-web -am clean install -P '!consul-dc'
mvn -pl xxxx-web -am install -P '!consul-dc'
# 如果某个依赖模块有profile 想排除的,则需要先构建
mvn -pl xxxx-common -am install -P '!quartz'
# 生成classpath 字符串
mvn -pl xxxx-web -P '!consul-dc' -q dependency:build-classpath "-Dscope=runtime" "-Dmdep.outputFile=classpath.txt"
# 执行调试
java "-Dspring.quartz.auto-startup=false" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5025 -cp "$(cat xxxx-web/classpath.txt)" com.xxxx.XxxxxWebApplication
```
## 一些依赖配置
```xml
org.springframework.boot
spring-boot-devtools
runtime
true
org.apache.maven.plugins
maven-compiler-plugin
3.11.0
```
---
## pwsh encoding
```bash
chcp 65001 > $null
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
Write-Host "UTF-8 mode enabled. Now run your Java app."
```