Posts

Showing posts from October, 2019

Git Clone 的时候遇到 Filename too long 错误

Image
在对某些仓库进行 Git Clone 的时候遇到了 Filename too long 的错误提示。 错误提示如下图: 可以有下面的一些解决办法: 可以有下面的一些解决办法: 在 Git bash 中运行下面的命令,来进行 git 配置的全局修改: git config --system core.longpaths true 在 Clone 仓库出现上面的错误后,进行已经克隆的目录中,然后找到 .git 目录的 config 文件。 添加 longpaths = true 这个配置。 然后重新删除已经克隆的目录中除了 .git 的所有目录。 然后再重新 checkout branch。 第 3 种办法就是在 Check out 的时候添加参数。 例如使用下面的命令进行 check out。 在 Clone 的时候添加 -c core.longpaths=true 参数。 例如使用下面的命令进行 clone git clone -c core.longpaths=true "https://src.ossez.com/spring/spring-boot.git" "C:\WorkDir\spring-boot" 你应该能够没有问题的解决这个问题。

Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/reference/html/deployment.html 请注意,在部署为  systemd  服务的时候,上面的配置文件为: [Unit] Description=myapp After=syslog.target [Service] User=myapp ExecStart=/var/myapp/myapp.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target 你需要自行修改 Description, user,  ExeStart 字段中的内容。 请注意,官方的配置可能不是非常正确。 假设我们的可执行 Jar 文件名为:reoc-mls-service-importer.jar 这个文件部署在:/home/reoc/reoc-mls-service-importer/reoc-mls-service-importer.jar 路径下。 如果你配置 ExecStart 为: ExecStart = /home/reoc/reoc-mls-service-importer/reoc-mls-service-importer.jar 你是没有办法运行的。 你需要配置为: ExecStart=/usr/bin/java -Xmx2048m -jar /home/reoc/reoc-mls-service-importer/reoc-mls-service-importer.jar 才可以。 其中 -Xmx2048m 是为这个进程指定分配的内存大小。 你也可以不分配内存,去掉这个参数也是可以的。

Gradle 如何打包 Spring Boot 如何不添加版本代码

在 Gradle 中如何在打包的 Jar 中不包含版本代码? 在 bootJar 中,使用下面的代码进行打包不包含版本代码。 archiveFileName = "${archiveBaseName.get()}.${archiveExtension.get()}" 上面的代码将不会打包版本号码 完整的代码如下: bootJar { archiveFileName = "${archiveBaseName.get()}.${archiveExtension.get()}" }

Gradle 如何打包 Spring Boot 可执行 JAR

Image
如何在 Gradle 中配置一个项目可以打包为 Spring Boot 可执行 Jar? 你首先需要添加到 org.springframework.boot 到插件中: 例如下面的代码: plugins { id 'maven-publish' id "org.asciidoctor.convert" version "2.3.0" id 'org.springframework.boot' version '2.1.4.RELEASE' } 然后应用插件,使用下面的代码: apply plugin: 'io.spring.dependency-management' 在 Build 界面中添加 bootJar 参数。 bootJar { baseName = 'reoc-mls-service' version = '0.1.0' } 例如上面的参数,当添加上面的参数后,我们的打包程序的 Jar 将会命名为: reoc-mls-service-0.1.0.jar

Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed

Image
系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 Archiva 默认的配置下如果你不是使用 snapshot 配置的话,是不允许对仓库进行重新部署的。 你可以手动修改 Archiva 的配置能够允许你对仓库进行重新部署,但是我们不建议你这样做。 对于非正式版的发布,你可以使用 snapshot。 配置的位置在你的 Archiva 仓库的配置中。

Gradle 如何配置将编译的 JAR 发布到 Archiva 中

有时候我们希望将我们的jar 开发包发布到 Archiva 中。 如何配置 Gradle 的编译脚本呢? 首先你需要启用 Gradle 的 Maven-publish 插件。 plugins { id 'maven-publish' } 如上面的代码,你需要确保你的插件已经启用了。 然后在脚本中添加下面的代码: publishing { publications { maven(MavenPublication) { from components.java artifact sourcesJar artifact javadocJar } } repositories { maven { credentials { username 'username' password 'password' } def releasesRepoUrl = "url to archiva" def snapshotsRepoUrl = "url to archiva" url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl } } } 上面的脚本有 2 部分的内容, 第一部分是对源代码进行编译。 第二部分是将编译的 jar 推送到 archiva 中。 在这里,你需要指定 archiva 的用户名和密码,这个用户能够具有 archiva 的相关权限。 随后在项目中运行命令: gradle publish 就可以进行编译后将包发送到 Archiva 中了。

jenkins 邮件发送错误

Image
jenkins 在创建新的 Build 的时候希望邮件进行通知。 但是邮件通知的时候出现错误: Unable to Send Mail - javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 这个很有可能是在你配置 jenkins 邮件服务器的时候选择了 SSL 你可以取消选择 SSL。 配置的路径在配置界面中的配置系统上。

Archiva 不小心删掉了管理员权限怎么办

Image
Archiva 的界面和 UI 比较容易出问题。 在添加用户和为用户进行权限修改的时候,不小心连 admin 这个用户的权限都删掉了。 这个时候应该如何恢复 admin 这个用户的权限? 这个时候你可以尝试删掉 Archiva 安装路径下的用户数据库。 你可以执行下面的命令: mv users { ,.old } 假设你的 archiva 是安装在  /opt/archiva 路径下的话。 那么 /opt/archiva/data/databases 路径下将会有一个 user 的目录。这个目录是存储所有的用户数据信息。 你可以直接将 user 目录删除,或者备份到别的目录下后重启 Archiva。 Archiva 发现没有 user 目录的话,将会重新创建,并且要求你输入 admin 用户的信息。 https://blog.ossez.com/archives/3089

Spring Boot and Rabbit MQ 异常的时候消息的状态

我们有一个处理消息的方法。 在处理消息的时候出现了异常,那出现异常后这个消息会怎么处理呢。 根据我们的实际情况的观察,如果出现了异常。 但是你没有捕获或者处理异常,这个消息会一直存在,并且你的系统会持续报告异常。 所以在你的系统中有要捕获异常,并且进行正确的处理。 https://blog.ossez.com/archives/3087

Hibernate 5 升级后 getProperties 错误

Image
升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor. getProperties ( ) Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor. getProperties ( ) Ljava/util/Map; at org.hibernate.cache.internal.EnabledCaching.<init> ( EnabledCaching.java: 77 ) at org.hibernate.engine.spi.CacheInitiator. initiateService ( CacheInitiator.java: 33 ) at org.hibernate.engine.spi.CacheInitiator. initiateService ( CacheInitiator.java: 24 ) at org.hibernate.service.spi.SessionFactoryServiceInitiator. initiateService ( SessionFactoryServiceInitiator.java: 30 ) at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl. initiateService ( SessionFactoryServiceRegistryImpl.java: 68 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl. createService ( AbstractServiceRegistryImpl.java: 263 ) at org.hibernate.service.internal.AbstractServiceRegistryImpl. initializeService ( AbstractServiceR...

Hibernate 4 升级到 5 后显示未知实体错误

Image
提示的错误信息如下: org.hibernate.MappingException: Unknown entity: com.ossez.reoc.common.crm.DoNotCall at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:670) at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1721) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:118) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventLi...

Hibernate 4 升级到 Hibernate 5 的时候 SessionFactory 不能使用

Image
在 Hibernate 4 升级到 5 的时候老的 sessionFactory 出现错误。 public static SessionFactory initSession() { Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); return sessionFactory; } 你可以使用下面的代码来在 Hibernate 5 中初始化: public static SessionFactory initSession() { Configuration configuration = new Configuration(); configuration.configure(); serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); Metadata metadata = new MetadataSources(serviceRegistry).getMetadataBuilder().build(); sessionFactory = metadata.getSessionFactoryBuilder().build(); return sessionFactory; } https://blog.ossez.com/archives/3065

IntelliJ 如何显示代码的代码 docs

Image
希望能够在 IntelliJ 代码上面显示方法的 docs。 如何进行显示? 你可以使用 Ctrl + Q 这个快捷键来查看方法的 Docs。 https://blog.ossez.com/archives/3061

Spring AMQP 发送消息到 RabbitMQ 收到 x-queue-type 错误

在使用 Spring AMQP 发送消息到 RabbitMQ 的时候收到错误信息: inequivalent arg 'x-queue-type' for queue 'com.ossez.real.estate' in vhost '/': received none but current is the value 'classic' of type 'longstr', class-id=50, method-id=10 上面的错误信息已经很明显了,说明的是发送消息的队列参数中少了 x-queue-type 这个参数。 在代码中,我们创建队列的参数为: return new Queue(MY_QUEUE_NAME, NON_DURABLE); 这直接创建队列的参数少了 args.put("x-queue-type", "classic"); 因此,我们需要在创建队列的时候添加上面的参数。 修改代码为: Map<String, Object> args = new HashMap<>(); // // set the queue with a dead letter feature args.put("x-queue-type", "classic"); return new Queue(MY_QUEUE_NAME, NON_DURABLE, false, false, args); 请参考 GitHub 中的代码: https://github.com/cwiki-us-demo/tutorials/blob/master/spring-amqp/src/main/java/com/baeldung/springamqp/simple/HelloWorldMessageApp.java https://blog.ossez.com/archives/3050

在 CentOS 7 上安装 RabbitMQ

Image
RabbitMQ 服务器在安装之前需要安装 erlang。 最新版本的 RabbitMQ 3.8.0 需要 Erlang 21.3 以上的版本支持。 在这里,我们需要在你的 CentOS 中安装 Erlang 21.3.8.8 版本。 下载地址和软件更新 Erlang 21.3.8.8 版本的下载地址,请参考链接:  https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-21.3.8.8-1.el7.x86_64.rpm RabbitMQ 3.8.0 的下载地址,请参考链接: https://www.rabbitmq.com/install-rpm.html 使用登录上你的 CentOS 7 服务器后,首先需要查看你的服务器是否安装了 wget,如果没有安装 wget,请运行 yum install wget 进行安装。 yum install wget 当 wget 安装完成后,运行 yum update 来更新你的服务器。 安装 Erlang 首先你需要下载 Erlang ,然后进行安装,在上面提到的地址   https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-21.3.8.8-1.el7.x86_64.rpm  中的右侧有一个 wget 的地址。 你可以运行 wget --content-disposition https: //packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-21.3.8.8-1.el7.x86_64.rpm/download.rpm 来进行下载。 当你下载到你的本地计算机后,运行命令 yum localinstall rabbitmq-server- 3.8 . 0 - 1 .el7.noarch.rpm 来安装你下载的 rpm 包。 当你安装完成后,你可以运行命令 erl -version 来查看你安装的 erl ...

IntelliJ IDEA 运行项目的时候提示 Command line is too long 错误

Image
在 IntelliJ IDEA 项目运行的时候收到了下面的错误提示: Error running 'Application': Command line is too long. Shorten command line for Application or also for Spring Boot default configuration. 这时候你需要调整运行项目的配置,将 Configuration 中的 Shorten Command Line 修改为 JAR 就可以了。 https://blog.ossez.com/archives/3041

GitLab 如何在 Web 界面中 Merge branch

Image
希望在 GitLab 中对 2 个 branch 进行合并,如何创建 Pull Request 并且如何进行合并呢? 在 GitLib 的 Web 界面中选择 Merge Requests 然后再界面中选择新建一个 Merge Request。 在左侧选择需要合并的 Branch,在右侧选择合并到的 Branch, 选择完成后单击按钮比较 branch 并且合并。 在弹出的界面中,单击提交合并按钮来进行合并 随后将会显示合并的按钮来进行合并,你需要单击这个按钮,否则的话是没有办法进行合并的。 然后你就可以看到状态被修改为合并了,你在分支中所有的修改将会合并到你希望合并到的分支中去了。 你可以将你不才需要的分支进行删除。 https://blog.ossez.com/archives/3009

IntelliJ IDEA 创建 Git 分支并且 Push 到远程

Image
在 IntelliJ 的右下角,你可以看到当前的 Git 分支,然后你可以单击这个分支后,在弹出的界面的最上方有一个新建分支的选项。 然后再弹出的界面中,输入你要创建的分支名称后回车输入。 然后从项目中找到需要的 Git 选项,然后在仓库中选择 Push 在弹出的界面中,你可以看到 PUSH 的选项。 然后选择 PUSH 就可以了。 然后在远程仓库中,你可以看到你新创建的 Branch 已经 Push 上来了。  https://blog.ossez.com/archives/3007