unraid环境下用koel搭建自己的家庭音乐库

koel是一个可以将本地音乐展示为在线web服务形式的php框架:https://koel.dev/

刚开始参考 https://post.smzdm.com/p/a3gv68v7/
发现pc上的web正常,但是手机端不行,因为版本不是最新的,初步猜疑是不是版本太旧的bug。

本来想自己弄一个最新版的docker版本,后面发现https://hub.docker.com 上有活跃的最新版本:https://hub.docker.com/r/hyzual/koel/

准备工作,设置自定义网络

为了确保宝塔的ip不会变动,保证数据库的稳定访问,我们需要创建自定义网络:

docker network create --subnet=172.18.0.0/16 myNetwork

创建后可以用 docker network ls来查看,如果已经创建,则进行下一步。

把baota加进自定义网络

docker network connect --ip 172.18.0.200 myNetwork baota

添加完成后可以用 docker inspect baota来确认,同时在另一个docker中来ping 172.18.0.200这个地址,确认是否能ping通。

安装

上面的网络确认好了后,就可以真正安装了:

docker run -d --name koel --link=baota -p xxx:80 --privileged=true --restart always -e DB_CONNECTION=mysql -e DB_HOST=baota -e DB_DATABASE=xxx -e DB_USERNAME=xxx -e DB_PASSWORD=xxx --network=myNetwork --ip 172.18.0.201 -v /mnt/user/media/music/songs:/music -v /mnt/user/media/music/covers:/var/www/html/public/img/covers -v /mnt/user/media/music/search_indexs:/var/www/html/storage/search-indexes hyzual/koel

这里连接了第三方的docker,用于数据库支持。因为我自己的是用的宝塔里面的mysql数据库,所以里面设置了相关的参数:
--link=baota

数据库访问参数:
DB_CONNECTION=mysql -e DB_HOST=baota -e DB_DATABASE=xxx -e DB_USERNAME=xxx -e DB_PASSWORD=xxx

网络设置,保证和数据库docker使用共同的自定义网络:
--network=myNetwork --ip 172.18.0.201

也可以用官方的docker镜像,经过测试也是可以正常:

docker run -d --name koel \
    -p xxx:80 \
    -e DB_CONNECTION=mysql \
    -e DB_HOST=baota \
    -e DB_DATABASE=koel \
    -e DB_USERNAME=koel \
    -e DB_PASSWORD=xxx \
    --network=myNetwork  \
    --ip 172.18.0.201 \
    -v /mnt/user/media/music/songs:/music \
    -v  /mnt/user/media/music/covers:/var/www/html/public/img/covers \
    -v /mnt/user/media/music/search_indexs:/var/www/html/storage/search-indexes \
    phanan/koel

安装后需要进入docker内部,执行初始账号初始化:

#php artisan koel:init --no-assets
Attempting to install or upgrade Koel.
Remember, you can always install/upgrade manually following the guide here:
📙  https://docs.koel.dev

App key exists -- skipping
Migrating database
Creating default admin account
Seeding initial data
The absolute path to your media directory. If this is skipped (left blank) now, you can set it later via the web interface.

 Media path [/music]:
 > 

🎆  Success! Koel can now be run from localhost with `php artisan serve`.
Log in with email xxx@koel.dev and password xxxxxx
You can also scan for media with `php artisan koel:sync`.
Again, visit 📙 https://docs.koel.dev for the official documentation.
Feeling generous and want to support Koel's development? Check out https://github.com/users/phanan/sponsorship 🤗
Thanks for using Koel. You rock! 🤘

安装完成后,按照设定的端口去访问,出现熟悉的首页。

默认账户:admin@koel.dev
默认密码:KoelIsCool

安装要点

  1. 需要的keol数据库,访问权限刚开始要设置成“所有人”。等安装成功了,再将访问权限设置成“指定IP”,比如示例docker对应的ip 172.18.0.201

版本更新

默认unraid界面的更新链接是无法更新的,会提示:

Configuration not found. Was this container created using this plugin?

解决的办法就是把image删掉,重新run。因为你的数据都在数据库,所以更新后,不会影响数据。

源码安装gcc9.3.0

环境

centos7

准备工作

yum install zstd

yum install glibc-headers
yum install gcc-c++

预下载

https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz

解压后进入目录,启动预下载,可能会很慢,或者卡死:
./contrib/download_prerequisites

后面发现下载bz2文件都提示无法解压,可能是工具环境的问题,也可能是下载完整性问题。

于是改为手动下载最新版:

https://mirrors.sjtug.sjtu.edu.cn/gnu/gmp/gmp-6.2.1.tar.zst
https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.gz
https://mirrors.sjtug.sjtu.edu.cn/gnu/mpc/mpc-1.2.1.tar.gz
http://isl.gforge.inria.fr/isl-0.23.tar.gz

zst文件解压: tar -I zstd -vxf xxxx

改名

解压后,都改成不带后缀版本的文件名,比如 gmp mpfr

编译

./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release  --enable-plugin --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux --disable-multilib

make

目标文件替换

编译完成后,所有目标文件都是在prefix路径下,但是系统环境可能还是旧的。这时需要升级替换。
主要有:

bin => /usr/bin
lib => /usr/lib/gcc/x86_64-redhat-linux/9.3.0/
lib64 => /usr/lib64
libexec => /usr/libexec

玩转NAS之搞清楚端口映射

玩NAS的因为解决外网访问的问题,经常需要将外网映射成内网。

如果你用的是unraid, 那么大部分的软件都是通过docker的方式安装的,也不可避免的要映射端口,将本地局域网端口映射成docker 内部应用的服务端口。

这里就有3层端口:外网->内部局域网->docker内部
两层映射:一次在路由器上映射,一次在启动docker时映射。

搞清楚了这3层端口两层映射行为,那么大部分的网络问题就都能迎刃而解。

宝塔面板中phpmyadmin404问题

宝塔是一套web面板,类似于webmin。

我们在unraid中安装后,一般都会套件安装 nginx,php,mysql,phpmyadmin等。

使用中在mysql页面点击phpMyAdmin按钮时,提示404:
http://192.168.x.x:123/phpmyadmin_94fece33f6f785c2/index.php

然后登录进baota daocker里面,确认了下nginx的配置文件。找到了nginx 123 server的root,发现是对应的路径问题。

解决

既然定位了原因,那么解决就很简单了,对症下药,通过ln -s 源 目的 创建目录的软连接。

OK...

enable clang-format in VSC

之前的环境都是好用的,一次深度垃圾清理后,发现所有配置和clang-format都不好用了。

clang-format要起作用:

  1. 装clang-format插件
  2. 装clang-format.exe,这个需要安装LLVM或者 cpptools插件
  3. 正确的配置文件

安装

  1. 安装clang-format 插件。xaver出品那个
  2. 配置Clang-format: Executable 有效路径。

配置

网上配置很多,只列举几个比较重要的:

配置vsc用的格式化工具为clang-foramt

  • Default Formatter(editor.defaultFormatter)

clang-format.exe路径配置

Clang-format:Executable(clang-format.executable)

保存文件自动格式化文件

  • format on save(editor.formatOnSave):yes
  • Format On Save Mode:file(默认)

格式的控制文件

方式1: 填写file。表示在项目根目录下搜索.clang-format
方式2: 修改VSC的Clang_format_style属性,直接填入键值对,也就是.clang-format的有效内容,这样就相当于全局配置文件了:

BasedOnStyle: LLVM
BreakBeforeBraces: Linux
Language: Cpp
ColumnLimit: 120
ReflowComments: false
SortIncludes: false
BreakBeforeBraces: Custom
BraceWrapping:
  AfterEnum: false
  AfterStruct: false
  SplitEmptyFunction: false
AlignConsecutiveAssignments: true
AlignConsecutiveMacros: true
AllowShortFunctionsOnASingleLine: None

windows touchpad driver

型号:151SK lenovo

最近深度清理后,发现鼠标的控制面板管理touchpad标签页不见了,touchpad无法禁用,一直在打字过程中光标乱飞。

找了lenovo的151sk的驱动页面,找了对应的touchpad驱动,不好用。

这个是显示win10的,也不是针对151sk的,但是实际测试可用:
ce0j06af.exe

通过nginx无插件方式实现git hook的方式

git hook 是一种很有用的方式。

一般的实现就是在本地开启一个监听hook url的http server,然后对url进行处理。

因为很多服务器都有nginx作为web server,所以我们优先考虑如何利用nginx。

一般网上比较多的推荐是用nginx的衍生版本openresty,通过lua来实现。

这里记录一个简单的思路:
通过nginx的lacation来匹配hook url特征,然后产生特定的access 或者error日志,然后通过脚本监控日志的变化,来判断是否有hook消息触发。这样nginx是现成的,且实现方法是无阻塞的,只要实现个一直监控文件大小的脚本就可以了,非常简单。

nginx部分简单配置

location /xxx/xxx/x {
        return 200 "xxx";
        access_log  /xxx.log;
    }

这里需要确认hook的触发是成功access还是失败error,才能正确的触发日志文件.

监控文件大小的脚本

这个脚本负责日志变化时,执行我们的git hook动作。

#!/bin/sh

# 要监控的文件
mfile=/xxx.log

#启动一个循环,定时检查文件是否存在
while true; do
    #监控文件大小
    fsize=`stat -c "%s" $mfile`
    if [ $fsize !=  1  ]; then
        echo "">$mfile
        echo "log file update"
        #TODO:需要的逻辑放这里
        ...
    fi
    sleep 5
done

监控脚本开机启动

脚本好了,然后就是要设置开机启动,否则服务器重启后,hook就失效了。
开机启动,有很多办法设置,比如最简单的rc.local脚本

Linux errno详解

存档文章。原始链接:https://www.cnblogs.com/Jimmy1988/p/7485133.html

Linux errno

  1. 错误码 / errno
    Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。

PS: 只有当系统调用或者调用lib函数时出错,才会置位errno!

查看系统中所有的errno所代表的含义,可以采用如下的代码:

/* Function: obtain the errno string
*   char *strerror(int errno)
*/

#include <stdio.h>
#include <string.h>     //for strerror()
//#include <errno.h>
int main()
{
    int tmp = 0;
    for(tmp = 0; tmp <=256; tmp++)
    {
        printf("errno: %2d\t%s\n",tmp,strerror(tmp));
    }
    return 0;
}

输出信息如下:

errno:  0       Success
errno:  1       Operation not permitted
errno:  2       No such file or directory
errno:  3       No such process
errno:  4       Interrupted system call
errno:  5       Input/output error
errno:  6       No such device or address
errno:  7       Argument list too long
errno:  8       Exec format error
errno:  9       Bad file descriptor
errno: 10       No child processes
errno: 11       Resource temporarily unavailable
errno: 12       Cannot allocate memory
errno: 13       Permission denied
errno: 14       Bad address
errno: 15       Block device required
errno: 16       Device or resource busy
errno: 17       File exists
errno: 18       Invalid cross-device link
errno: 19       No such device
errno: 20       Not a directory
errno: 21       Is a directory
errno: 22       Invalid argument
errno: 23       Too many open files in system
errno: 24       Too many open files
errno: 25       Inappropriate ioctl for device
errno: 26       Text file busy
errno: 27       File too large
errno: 28       No space left on device
errno: 29       Illegal seek
errno: 30       Read-only file system
errno: 31       Too many links
errno: 32       Broken pipe
errno: 33       Numerical argument out of domain
errno: 34       Numerical result out of range
errno: 35       Resource deadlock avoided
errno: 36       File name too long
errno: 37       No locks available
errno: 38       Function not implemented
errno: 39       Directory not empty
errno: 40       Too many levels of symbolic links
errno: 41       Unknown error 41
errno: 42       No message of desired type
errno: 43       Identifier removed
errno: 44       Channel number out of range
errno: 45       Level 2 not synchronized
errno: 46       Level 3 halted
errno: 47       Level 3 reset
errno: 48       Link number out of range
errno: 49       Protocol driver not attached
errno: 50       No CSI structure available
errno: 51       Level 2 halted
errno: 52       Invalid exchange
errno: 53       Invalid request descriptor
errno: 54       Exchange full
errno: 55       No anode
errno: 56       Invalid request code
errno: 57       Invalid slot
errno: 58       Unknown error 58
errno: 59       Bad font file format
errno: 60       Device not a stream
errno: 61       No data available
errno: 62       Timer expired
errno: 63       Out of streams resources
errno: 64       Machine is not on the network
errno: 65       Package not installed
errno: 66       Object is remote
errno: 67       Link has been severed
errno: 68       Advertise error
errno: 69       Srmount error
errno: 70       Communication error on send
errno: 71       Protocol error
errno: 72       Multihop attempted
errno: 73       RFS specific error
errno: 74       Bad message
errno: 75       Value too large for defined data type
errno: 76       Name not unique on network
errno: 77       File descriptor in bad state
errno: 78       Remote address changed
errno: 79       Can not access a needed shared library
errno: 80       Accessing a corrupted shared library
errno: 81       .lib section in a.out corrupted
errno: 82       Attempting to link in too many shared libraries
errno: 83       Cannot exec a shared library directly
errno: 84       Invalid or incomplete multibyte or wide character
errno: 85       Interrupted system call should be restarted
errno: 86       Streams pipe error
errno: 87       Too many users
errno: 88       Socket operation on non-socket
errno: 89       Destination address required
errno: 90       Message too long
errno: 91       Protocol wrong type for socket
errno: 92       Protocol not available
errno: 93       Protocol not supported
errno: 94       Socket type not supported
errno: 95       Operation not supported
errno: 96       Protocol family not supported
errno: 97       Address family not supported by protocol
errno: 98       Address already in use
errno: 99       Cannot assign requested address
errno: 100      Network is down
errno: 101      Network is unreachable
errno: 102      Network dropped connection on reset
errno: 103      Software caused connection abort
errno: 104      Connection reset by peer
errno: 105      No buffer space available
errno: 106      Transport endpoint is already connected
errno: 107      Transport endpoint is not connected
errno: 108      Cannot send after transport endpoint shutdown
errno: 109      Too many references: cannot splice
errno: 110      Connection timed out
errno: 111      Connection refused
errno: 112      Host is down
errno: 113      No route to host
errno: 114      Operation already in progress
errno: 115      Operation now in progress
errno: 116      Stale file handle
errno: 117      Structure needs cleaning
errno: 118      Not a XENIX named type file
errno: 119      No XENIX semaphores available
errno: 120      Is a named type file
errno: 121      Remote I/O error
errno: 122      Disk quota exceeded
errno: 123      No medium found
errno: 124      Wrong medium type
errno: 125      Operation canceled
errno: 126      Required key not available
errno: 127      Key has expired
errno: 128      Key has been revoked
errno: 129      Key was rejected by service
errno: 130      Owner died
errno: 131      State not recoverable
errno: 132      Operation not possible due to RF-kill
errno: 133      Memory page has hardware error
errno: 134~255  unknown error!

Linux中,在头文件 /usr/include/asm-generic/errno-base.h 对基础常用errno进行了宏定义:

#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM        1  /* Operation not permitted */
#define ENOENT       2  /* No such file or directory */
#define ESRCH        3  /* No such process */
#define EINTR        4  /* Interrupted system call */
#define EIO      5  /* I/O error */
#define ENXIO        6  /* No such device or address */
#define E2BIG        7  /* Argument list too long */
#define ENOEXEC      8  /* Exec format error */
#define EBADF        9  /* Bad file number */
#define ECHILD      10  /* No child processes */
#define EAGAIN      11  /* Try again */
#define ENOMEM      12  /* Out of memory */
#define EACCES      13  /* Permission denied */
#define EFAULT      14  /* Bad address */
#define ENOTBLK     15  /* Block device required */
#define EBUSY       16  /* Device or resource busy */
#define EEXIST      17  /* File exists */
#define EXDEV       18  /* Cross-device link */
#define ENODEV      19  /* No such device */
#define ENOTDIR     20  /* Not a directory */
#define EISDIR      21  /* Is a directory */
#define EINVAL      22  /* Invalid argument */
#define ENFILE      23  /* File table overflow */
#define EMFILE      24  /* Too many open files */
#define ENOTTY      25  /* Not a typewriter */
#define ETXTBSY     26  /* Text file busy */
#define EFBIG       27  /* File too large */
#define ENOSPC      28  /* No space left on device */
#define ESPIPE      29  /* Illegal seek */
#define EROFS       30  /* Read-only file system */
#define EMLINK      31  /* Too many links */
#define EPIPE       32  /* Broken pipe */
#define EDOM        33  /* Math argument out of domain of func */
#define ERANGE      34  /* Math result not representable */

#endif

在 /usr/include/asm-asm-generic/errno.h 中,对剩余的errno做了宏定义:

#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H

#include <asm-generic/errno-base.h>

#define EDEADLK     35  /* Resource deadlock would occur */
#define ENAMETOOLONG    36  /* File name too long */
#define ENOLCK      37  /* No record locks available */
#define ENOSYS      38  /* Function not implemented */
#define ENOTEMPTY   39  /* Directory not empty */
#define ELOOP       40  /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN  /* Operation would block */
#define ENOMSG      42  /* No message of desired type */
#define EIDRM       43  /* Identifier removed */
#define ECHRNG      44  /* Channel number out of range */
#define EL2NSYNC    45  /* Level 2 not synchronized */
#define EL3HLT      46  /* Level 3 halted */
#define EL3RST      47  /* Level 3 reset */
#define ELNRNG      48  /* Link number out of range */
#define EUNATCH     49  /* Protocol driver not attached */
#define ENOCSI      50  /* No CSI structure available */
#define EL2HLT      51  /* Level 2 halted */
#define EBADE       52  /* Invalid exchange */
#define EBADR       53  /* Invalid request descriptor */
#define EXFULL      54  /* Exchange full */
#define ENOANO      55  /* No anode */
#define EBADRQC     56  /* Invalid request code */
#define EBADSLT     57  /* Invalid slot */

#define EDEADLOCK   EDEADLK

#define EBFONT      59  /* Bad font file format */
#define ENOSTR      60  /* Device not a stream */
#define ENODATA     61  /* No data available */
#define ETIME       62  /* Timer expired */
#define ENOSR       63  /* Out of streams resources */
#define ENONET      64  /* Machine is not on the network */
#define ENOPKG      65  /* Package not installed */
#define EREMOTE     66  /* Object is remote */
#define ENOLINK     67  /* Link has been severed */
#define EADV        68  /* Advertise error */
#define ESRMNT      69  /* Srmount error */
#define ECOMM       70  /* Communication error on send */
#define EPROTO      71  /* Protocol error */
#define EMULTIHOP   72  /* Multihop attempted */
#define EDOTDOT     73  /* RFS specific error */
#define EBADMSG     74  /* Not a data message */
#define EOVERFLOW   75  /* Value too large for defined data type */
#define ENOTUNIQ    76  /* Name not unique on network */
#define EBADFD      77  /* File descriptor in bad state */
#define EREMCHG     78  /* Remote address changed */
#define ELIBACC     79  /* Can not access a needed shared library */
#define ELIBBAD     80  /* Accessing a corrupted shared library */
#define ELIBSCN     81  /* .lib section in a.out corrupted */
#define ELIBMAX     82  /* Attempting to link in too many shared libraries */

#define ELIBEXEC    83  /* Cannot exec a shared library directly */
#define EILSEQ      84  /* Illegal byte sequence */
#define ERESTART    85  /* Interrupted system call should be restarted */
#define ESTRPIPE    86  /* Streams pipe error */
#define EUSERS      87  /* Too many users */
#define ENOTSOCK    88  /* Socket operation on non-socket */
#define EDESTADDRREQ    89  /* Destination address required */
#define EMSGSIZE    90  /* Message too long */
#define EPROTOTYPE  91  /* Protocol wrong type for socket */
#define ENOPROTOOPT 92  /* Protocol not available */
#define EPROTONOSUPPORT 93  /* Protocol not supported */
#define ESOCKTNOSUPPORT 94  /* Socket type not supported */
#define EOPNOTSUPP  95  /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT    96  /* Protocol family not supported */
#define EAFNOSUPPORT    97  /* Address family not supported by protocol */
#define EADDRINUSE  98  /* Address already in use */
#define EADDRNOTAVAIL   99  /* Cannot assign requested address */
#define ENETDOWN    100 /* Network is down */
#define ENETUNREACH 101 /* Network is unreachable */
#define ENETRESET   102 /* Network dropped connection because of reset */
#define ECONNABORTED    103 /* Software caused connection abort */
#define ECONNRESET  104 /* Connection reset by peer */
#define ENOBUFS     105 /* No buffer space available */
#define EISCONN     106 /* Transport endpoint is already connected */
#define ENOTCONN    107 /* Transport endpoint is not connected */
#define ESHUTDOWN   108 /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS    109 /* Too many references: cannot splice */
#define ETIMEDOUT   110 /* Connection timed out */
#define ECONNREFUSED    111 /* Connection refused */
#define EHOSTDOWN   112 /* Host is down */
#define EHOSTUNREACH    113 /* No route to host */
#define EALREADY    114 /* Operation already in progress */
#define EINPROGRESS 115 /* Operation now in progress */
#define ESTALE      116 /* Stale file handle */
#define EUCLEAN     117 /* Structure needs cleaning */
#define ENOTNAM     118 /* Not a XENIX named type file */
#define ENAVAIL     119 /* No XENIX semaphores available */
#define EISNAM      120 /* Is a named type file */
#define EREMOTEIO   121 /* Remote I/O error */
#define EDQUOT      122 /* Quota exceeded */

#define ENOMEDIUM   123 /* No medium found */
#define EMEDIUMTYPE 124 /* Wrong medium type */
#define ECANCELED   125 /* Operation Canceled */
#define ENOKEY      126 /* Required key not available */
#define EKEYEXPIRED 127 /* Key has expired */
#define EKEYREVOKED 128 /* Key has been revoked */
#define EKEYREJECTED    129 /* Key was rejected by service */

/* for robust mutexes */
#define EOWNERDEAD  130 /* Owner died */
#define ENOTRECOVERABLE 131 /* State not recoverable */

#define ERFKILL     132 /* Operation not possible due to RF-kill */

#define EHWPOISON   133 /* Memory page has hardware error */

#endif
  1. 打印错误信息
    1). 打印错误信息 / perror
    作用:
    打印系统错误信息

头文件:

include

函数原型:

void perror(const char *s)
参数:

s: 字符串提示符

输出形式:
const char *s: strerror(errno) //提示符:发生系统错误的原因
返回值:
无返回值
2). 字符串显示错误信息 / strerror
作用:
将错误码以字符串的信息显示出来

头文件:

include

函数原型:

char *strerror(int errnum);
参数:

errnum: 即errno

返回值:
返回错误码字符串信息

eclipse console build日志乱码

现象

windows中通过免安装eclipse工具包,编译时部分日志:

make[1]: 杩涘叆鐩綍鈥?/home/w600/project/w600_sdk/app鈥?
make[1]: 绂诲紑鐩綍鈥?/home/w600/project/w600_sdk/app鈥?
make[1]: 杩涘叆鐩綍鈥?/home/w600/project/w600_sdk/demo鈥?
make[2]: 杩涘叆鐩綍鈥?/home/w600/project/w600_sdk/demo/console鈥?
make[2]: 绂诲紑鐩綍鈥?/home/w600/project/w600_sdk/demo/console鈥?
make[1]: 绂诲紑鐩綍鈥?/home/w600/project/w600_sdk/demo鈥?
make[1]: 杩涘叆鐩綍鈥?/home/w600/project/w600_sdk/platform/boot/gcc鈥?
make[1]: 绂诲紑鐩綍鈥?/home/w600/project/w600_sdk/platform/boot/gcc鈥?

定位

首先根据make[1]在全工程搜索,根据搜出的内容对比,大概知道乱码的部分内容是“进入目录”和“离开目录”, 尾部的是中文的双引号。所以基本可以知道内容是对的,只是UTF8的中文支持问题了。

解决

  • 网上的方案1:在eclipse中修改相关的配置,修改为UTF8,无效。
  • 网上的方案2:在eclipse.ini 中增加-Dfile_encoding=UTF-8。这个思路应该时对了,但是在我本地无法生效,应该是eclipse目录中的eclipse.ini没生效,具体原因,没有细究。
  • 可用的方案3:最终的方案就是在windows系统环境变量中增加:JAVA_TOOL_OPTIONS,值为:-Dfile_encoding=UTF-8。由此联想 通过启动命令脚本带参数的方式应该也可以。