JAVA

作者: akka9 | 来源:发表于2021-09-24 00:19 被阅读0次

解压文件恢复为war

$ ls ROOT
org WEB-INF META-INF

$ jar cfv0M ROOT.war .

# 或者使用 winrar  7zip等工具 创建压缩文件,选择ZIP格式的 “存档”(Store)模式。

JDK 8 无痛升级到 JDK 11

只需要在源码增加依赖,或是在 jar 包或是 war 包中增加依赖包,就可以把运行环境由JDK8 升级到 JDK11.

jdk8to11-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>jdk8to11</groupId>
   <artifactId>jdk8to11</artifactId>
   <version>1.0</version>

   <dependencies>
<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>jakarta.activation</artifactId>
    <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>jakarta.transaction</groupId>
    <artifactId>jakarta.transaction-api</artifactId>
    <version>1.3.3</version>
</dependency>
<!-- API -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>

<!-- Runtime -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.3</version>
    <scope>runtime</scope>
</dependency>

<!-- Alternative runtime -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
    <scope>runtime</scope>
</dependency>
<!-- API -->
<dependency>
    <groupId>jakarta.xml.ws</groupId>
    <artifactId>jakarta.xml.ws-api</artifactId>
    <version>2.3.3</version>
</dependency>

<!-- Runtime -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.3</version>
</dependency>
<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>1.3.5</version>
</dependency>
 
   </dependencies>
</project>

## JDK 8 to JDK 11
java11 报sun.misc.BASE64Decoder 这个不存在
原因: rt.jar 在 JDK 9 已经删除了。
解决办法:修改代码,直接用 java.util.Base64.Encoder 和 java.util.Base64.Decoder 替代使用。(支持JDK8及以上)
把 jdk 8 中的 rt.jar 上传到私服上.




## WebService 依赖包 for jdk11
    implementation group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.1'
    implementation group: 'javax.jws', name: 'javax.jws-api', version: '1.1'


## JAXB 依赖包 for jdk11 
    implementation "javax.xml.bind:jaxb-api:2.3.0"
    implementation "com.sun.xml.bind:jaxb-core:2.3.0"
    implementation "com.sun.xml.bind:jaxb-impl:2.3.0"
    implementation "javax.activation:activation:1.1.1"


// replacements for deprecated JDK module java.xml.ws
runtimeOnly 'javax.xml.ws:jaxws-api:2.3.0' // javax.xml.ws.* classes
runtimeOnly 'javax.jws:jsr181-api:1.0-MR1' // for javax.jws.* classes

// replacement for deprecated JDK module java.xml.bind

runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:2.3.0.1'
runtimeOnly 'org.glassfish:javax.json:1.1.2'
runtimeOnly 'org.eclipse:yasson:1.0.1'

MVN 可执行 war/jar

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

Gradle 性能优化

cat /usr/local/gradle-6.4.1/gradle.properties

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.jvmargs=-Xmx5120m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError

## 设置 gradle 全局 仓库地址,忽略项目中指定的仓库地址。
$ GRADLE_USER_HOME/init.gradle

// gradle脚本依赖仓库
gradle.projectsLoaded {
    rootProject.buildscript {
        repositories {
        maven {
          allowInsecureProtocol = true
          url "http://www.nexus.com:8081/repository/repo1/"
          credentials {
          username 'xxx'
          password '****'
        }
        maven {
          allowInsecureProtocol = true
          url "http://www.nexus.com:8081/repository/repo1/"
          credentials {
            username 'xxx'
            password '****'
           }
        }
    }
  }
}

// 项目依赖仓库
allprojects {
    repositories {
        maven {
          allowInsecureProtocol = true
          url "http://www.nexus.com:8081/repository/repo1/"
          credentials {
          username 'xxx'
          password '****'
        }
        maven {
          allowInsecureProtocol = true
          url "http://www.nexus.com:8081/repository/repo1/"
          credentials {
          username 'xxx'
          password '****'
        }
  }
}



gradle 7 以上要求 mvn 仓库使用https 协议。

可以增加 allowInsecureProtocol = true 继续使用http 协议。

repositories {
    maven {
        allowInsecureProtocol = true
        url "http://www.nexus.com:8081/repository/xxx/"
        credentials {
            username 'xxx'
            password '******'
        }
    }
    // mavenCentral()
}

下载jar 文件到本地

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>springframework</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
 
   <!-- 下载相应jar包依赖 -->
   <dependencies>
     <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
     <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
      </dependency>
 
   </dependencies>
</project>

download.bat

call mvn -f pom.xml dependency:copy-dependencies
@pause

启动报错: java.lang.NoClassDefFoundError: javafx/util/Pair

原因: Oracle JDK 8 Linux ARM 架构包、Oracle JDK 11+、Openjdk 8+ 等环境都没有带 jfxrt.jar,然而 x86 架构的 Oracle JDK 1.8 是有这个包。
( 路径在 $JAVA_HOME/jre/lib/ext/jfxrt.jar)

解决办法:

  1. 如果你使用的是 JDK 1.8, 可以将 Oracle JDK X86 的 jfxrt.jar 拷贝出来,上传到私有仓库,坐标可以设置为:
<dependency>
  <groupId>javafx</groupId>
  <artifactId>jfxrt</artifactId>
  <version>1.0</version>
</dependency>

并将代码引用这个依赖,即可以解决依赖问题。

  1. 如果你使用的是 JDK 11 或更高的版本,可以引入依赖:
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-base</artifactId>
    <version>17</version>
</dependency>

以上两种办法均可以,并不需要网上说的修改JDK环境。

A环境正常,B环境启动报错: java.lang.NoSuchMethodError:javax.validation.BootstrapConfiguration.getClockProviderClassName

原因:validation-api-1.1.0.Final.jar validation-api-2.0.0.Final.jar 两个版本的jar包冲突,删除旧版本问题解决。

A环境正常,B环境启动报错:Caused by: java.lang.VerifyError: class io.netty.channel.nio.NioEventLoop overrides final method pendingTasks.()

原因:netty 存在多个版本,删除旧版本,保留最新版,问题解决。

JDK 17

gradle 7.3+
lombok  1.18.22

https://github.com/gradle/gradle/issues/16857

ZK

cat /app/zk/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/app/zk/data
dataLogDir=/app/zk/logs
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider 
metricsProvider.httpPort=7000
admin.serverPort=7001
clientPort=2181
server.1=zk1.infra.dev:2881:3881
server.2=zk2.infra.dev:2881:3881
server.3=zk3.infra.dev:2881:3881

autopurge.snapRetainCount=10
autopurge.purgeInterval=48


cat /app/zk/data/myid 
2

cat /etc/systemd/system/zk.service
[Unit]
Description=zookeeper server daemon
After=syslog.target network.target

[Service]
Alias=zookeeper.service
Environment=JAVA_HOME=/usr/java/latest
Environment=ZOO_LOG_DIR=/app/zk/logs
Environment=ZOOCFGDIR=/app/zk/conf
Type=forking
WorkingDirectory=/home/app
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /app/zk/conf /app/zk/data  /app/zk/logs
ExecStartPre=/bin/chown app -R /app/zk/conf /app/zk/data  /app/zk/logs
ExecStart=/usr/local/zk/bin/zkServer.sh start
ExecStop=/usr/local/zk/bin/zkServer.sh stop
#ExecReload=/bin/kill -s HUP
#ExecStop=/bin/kill -s QUIT
#PrivateTmp=true
User=app
KillMode=process
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target

相关文章

  • Java(JavaEE)学习线路图1

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • Java学习线路图

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 大数据学习线路图

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 大数据学习教程

    Java教程 Java 教程Java 简介Java 开发环境配置Java 基础语法Java 对象和类Java 基本...

  • 一篇文章,全面解读Android面试知识点

    Java Java基础 Java集合框架 Java集合——ArrayList Java集合——LinkedList...

  • java学习路线

    javaSE java基础语法 java文件操作 java网络操作 java多线程 java数据库操作 java ...

  • java编程分类

    一、java简介java开发环境配置java基础语法java对象与类java基本数据类型java变量类型java修...

  • Java-01初识Java

    Java的3大版本 Java有三大版本,Java SE, Java ME, Java EE Java SE(Jav...

  • JAVA循环语句(四)9.29

    Java条件 if Java条件if...else Java条件多重if Java条件语句 嵌套if Java条件...

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

网友评论

      本文标题:JAVA

      本文链接:https://www.haomeiwen.com/subject/hftbbltx.html