关于java 添加腾讯云镜像,mvnd支持,以及测速链接的支持#268
Conversation
# Conflicts: # src/recipe/lang/Java.c
# Conflicts: # src/recipe/lang/Java.c # src/recipe/menu.c
| /* ------------------------ chsrc 内部实现 ------------------------ */ | ||
| /* 不要列出 &UpstreamProvider 和 &UserDefinedProvider */ | ||
| }; | ||
| }; No newline at end of file |
There was a problem hiding this comment.
似乎你的编辑器会删除最后一行空行,可以安装一下 EditorConfig 插件。
| char *user_agent = NULL; | ||
| if (in_custom_user_agent_mode()) | ||
| { | ||
| user_agent = strdup("maven/3.9.11"); | ||
| }else{ | ||
| user_agent = xy_2strjoin("chsrc/", Chsrc_Version); | ||
| } |
There was a problem hiding this comment.
不要这么处理,看最后的评论。
另外注意代码格式,
if ()
{
}
else
{
}| {NotSkip, NA, NA, "https://mirrors.huaweicloud.com/ubuntu-releases" Big_File_ubuntu, ROUGH} | ||
| }, | ||
|
|
||
| HuaweiCdn = |
There was a problem hiding this comment.
这个的话,我去找一些链接(其他镜像)去替换域名到repo 试试, 试试才知道
There was a problem hiding this comment.
There was a problem hiding this comment.
let new = HuaweiCDN
let old = 现有的那个默认华为镜像站
如果 $new 如此通用,而且一直比 $old 快一些,我觉得可以把 $old 直接给换成 $new。
There was a problem hiding this comment.
$new 通用 单 并不能保证一直比$old 快 , 从实际体验上来说,和之前的经验, 要看网络状态。我之前都是手动测速后设置的。
| } | ||
|
|
||
| bool | ||
| chef_is_home (const char *str) |
There was a problem hiding this comment.
不要定义 chef_ 开头的任何函数,因为 chef_ 开头的函数是通用函数,你可以看下 framework 目录的两个 chef 文件。
辅助性函数全都应该加上 pl_java_ 的前缀,因为我们每一个recipe文件都是被 #include 到全局编译的。
而且这里单独定义这个小函数的意图是?
| println (file); | ||
| } | ||
|
|
||
| if (maven_daemon_exist) |
There was a problem hiding this comment.
其实我是想删掉这个命令判断的, 如果我是用windows 那么 这三个命令都将不存在,如果是linux 则正常存在。 因为我不会主动去配置环境变量,因为本身可以自动切换配置了反而导致每次切换要修改环境变量,甚至有时注销才能生效(还不支持同时启动 不同版本jdk的项目的需求)
| {&Ali, "https://maven.aliyun.com/repository/public/", DelegateToMirror}, | ||
| {&Huawei, "https://mirrors.huaweicloud.com/repository/maven/", "https://mirrors.huaweicloud.com/repository/maven/com/tencentcloudapi/tencentcloud-sdk-java/3.1.1033/tencentcloud-sdk-java-3.1.1033-javadoc.jar"}, | ||
| {&HuaweiCdn, "https://repo.huaweicloud.com/repository/maven/", "https://repo.huaweicloud.com/repository/maven/com/tencentcloudapi/tencentcloud-sdk-java/3.1.1033/tencentcloud-sdk-java-3.1.1033-javadoc.jar"}, | ||
| {&Tencent, "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/", "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/com/tencentcloudapi/tencentcloud-sdk-java/3.1.1033/tencentcloud-sdk-java-3.1.1033-javadoc.jar"}, |
There was a problem hiding this comment.
可参考一下 https://github.com/RubyMetric/chsrc/blob/main/src/recipe/os/APT/Debian.c#L50
如果是直接往后面加后缀,可以直接用 chef_ 函数,不用定义一大堆重复的。
|
你的方案是定义了一个 因为出现了一个修改 user-agent 的情况,而且我们已经打算考虑提供 framework 级别的支持了,就应该为其他可能出现修改 user-agent 的 recipe 考虑。所以你在 in_custom_user_agent_mode() 直接 if else 了仅仅两种情况,就只能支持定义为 maven 了。 你应该看一下全局结构体变量 |
我的想法是在recipe 上添加参数或者其他方式声明user-agent, if 不为空设置得custom值 否则则用默认值, 只是不知道如何做,就先照抄上面的函数先写死返回了false, 因为我不太懂 recipe 的结构体声明 |
|
旧版本是可以声明 命令 maven mvn mvnd java 这些的, 新版本看起来都删掉了,全局搜索也没有找到, 那么添加mvnd的命令还 应该如何做 |
看 Java recipe 代码的非注释第一行 def_target(pl_java, "java/maven/mvn/gradle"); |
是的,就是要在 recipe 的时候去修改,你需要定义一个函数如 |
|
实现了 void
pl_java_extract_maven_home_string (char *str)
{
// 具体实现
}
void
pl_java_getsrc ()
{
char *output;
int status = xy_run_capture ("mvnd -v", &output);
if (0==status)
char* maven_home = pl_java_extract_maven_home_string (output);
else
printf ("no maven home");
} |
添加maven-daemon 和 mvnd 命令
定义字段呀,ProgStatus 结构体里才是字段,这才能修改。
|
|
你的意思是 stdout 是空的,这些都是 stderr 里的是吗? 你直接判断 status,如果是 0,从 stdout 里提取字符串,如果不是0,直接不管了。 |
学校学到指针前都结课了, 确实不太熟。 |
我没有 get 到 「 刻意让 stderr 报出来 」, 如果找不到把路径设置为 ~/.m2/ 更好 还是提示找不到的错误返回出去 |
|
命令行程序,输出到 stderr 里的一般是重要的错误,要展示出来给用户看到的,没有必要遮挡住这种错误。
我不清楚默认的路径应该是什么,如果是这个,那就用这个。或者你直接给用户提示一下,“找不到,将使用默认路径”,然后再给一个默认路径 |
|
如果做了mvn 命令检查 理论上来说,如果mvn命令存在,则 maven_home 一定存在 |
理论上是可以有的。但是现实情况来看,用户级(默认情况)+ 项目级( 支持太多选项对用户也是是一种负担。 |
但是目前设置得是系统级,而不是默认级。 |
|
之前你是更倾向于系统级而不是用户级 |
|
现在的 /**
* -local 的含义是启用 *项目级* 换源
*
* 每个 target 对 [-local] 的支持情况可使用 | chsrc ls <target> | 来查看
*
*
* 1. 默认不使用该选项时,含义是 *全局* 换源,
*
* 全局分为 (1)系统级 (2)用户级
*
* 大多数第三方配置软件往往默认进行的是 *用户级* 的配置。所以 chsrc 首先将尝试使用 *用户级* 配置
*
* 2. 若不存在 *用户级* 的配置,chsrc 将采用 *系统级* 的配置
*
* 3. 最终效果本质由第三方软件决定,如 poetry 默认实现的就是项目级的换源
*/所以 按照这个注释的定义,我们默认情况下,要么用注释里说的 “系统级”,要么用注释里说的 “用户级”。我们选择一种合适的就行了。 考虑到你说 "如果是服务器环境可能不是root用户,所以以用户级别配置为主",我觉得这个考量是很好的,我们倾向于选择用户能直接修改的配置——那就是用户级。 现在都是计算机一般都是单用户,“用户级” 的修改基本就等价于 “系统级”。 |
这是我的问题,因为我对 Java 生态不熟悉,我不知道你说的 |
|
直接写成用户级吧。 未来如果考虑实现 这几个 issue 已经持续太久了。 |
|
global 的意思是全局, 所以基本相当于 -system 。 我设置了用户层面的配置,对用户的各个项目来说,也算是一种 “global” 但我们讨论用户级和全局的时候,全局的语义是比用户级大的,那么全局当然指的是不同用户在同一个系统,或者不同用户在不同系统使用同一个maven的情况, 当然一般开发者是单用户的,但是在部署服务器端一般会区分root和普通用户,所以一般的习惯都是配置为用户级(至少在java这里一般用不到特权提升)。 最开始考虑使用用户级出于两点考虑:
|
|
如果遇到什么问题可留言 你可以直接在 setsrc 一开始进行 不需要额外定义函数了。 |
|
core.c 的user_agent初始化 只能是常量, 那么如何设置 chsrc/ + version的形式的默认值 |
ProgStatus =
{
.leader_selected_index = -1,
.chgtype = ChgType_Auto,
.chsrc_run_faas = false,
.user_agent = "chsrc/" Chsrc_Version
}; |








这是一个review PR 还需要继续修改