try (Stream<String> lines = Files.lines(targetFile)) {
List<String> replacedContent = lines.map(line ->
StringUtils.replaceEach(line,keys, values))
.parallel()
.collect(Collectors.toList());
Files.write(targetFile, replacedContent);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试替换文件的每一行中的多个文本模式.但我观察到"\ r \n"(字节等效10和13)正被替换为"\ r"(仅为10)并且我的比较测试失败了.
我想保留输入文件中的换行符,并且不希望java触及它们.任何人都可以建议是否有办法这样做而不必使用单独的默认替换"\ r \n".
我正在尝试从 docker 容器中获取 Maven 离线构建。我已经启用了 buildkit。我已经运行mvn dependency:go-offline -s ~/checkouts/settings.xml以缓存/root/.m2主机的依赖项。我希望在构建 maven 项目的容器中使用它。
这是我的 Dockerfile:
#syntax=docker/dockerfile:experimental
FROM maven:3.6.1-jdk-11 AS build
WORKDIR /
COPY . /
RUN --mount=type=cache,target=/root/.m2 mvn -o install
FROM scratch
COPY --from=build /admin/admin-
rest/target/admin-rest.war /webapps/ROOT.war
Run Code Online (Sandbox Code Playgroud)
当我尝试使用docker build此 Dockerfile 时,出现以下错误:
插件 org.codehaus.mojo:build-helper-maven-plugin:3.0.0 或其依赖项之一无法解析:无法在离线模式下访问中心 ( https://repo.maven.apache.org/maven2 ) 和工件 org.codehaus.mojo:build-helper-maven-plugin:jar:3.0.0 之前没有从它下载。-> [帮助 1]
我的 Docker 版本:
Client:
Version: 18.09.6
API version: 1.39
Go version: go1.10.8
Git commit: 481bc77
Built: Sat May 4 02:35:57 2019
OS/Arch: linux/amd64
Experimental: …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个API,用文本文件中的不同字符串替换包含某个子字符串的所有行.
我正在使用Java 8流来过滤包含给定模式的行.我有文件写入部分的问题.
Files.lines(targetFile).filter(line -> line.contains(plainTextPattern)).parallel()
.map(line-> line.replaceAll(plainTextPattern, replaceWith)).parallel();
Run Code Online (Sandbox Code Playgroud)
上面的代码按行读取文件,过滤与模式匹配的行并替换为give字符串,并返回仅包含替换行的字符串流.
我们需要将这些行写回文件.由于我们在管道结束后丢失了流,因此我将以下内容添加到管道中:
.forEach(line -> {
try {
Files.write(targetFile, line.toString().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我希望它只会写入修改后的文件(因为它在管道中),并保持其他行不变.
但它似乎截断文件中每一行的文件,并仅保留最后一个处理的行并删除管道中未匹配的所有行.
有没有我在使用流处理文件时缺少的东西?
我遇到了JIRA帖子,它提供了一个解决方案,在POM的每个依赖项标签中都包含了排除标记.
但是我有大量的项目,每个项目都有大量的依赖标记.<exclusion>在每个依赖标记中包含它是不可行的.
问题:有没有办法全局关闭maven中传递依赖项的导入?
64位服务器的MetaspaceSize的默认值是什么?我在官方文档中找不到它。
我观察到在服务器JVM进程中,GC频率有时会很高并且还在不断增长。如果我几次重新启动该服务,它将恢复稳定。我认为这是由于JRE升级所致。
JVM Heap的最大大小设置为6GB,但是当发生此问题时,我们看到仅使用3GB的堆。元空间几乎没有增长,并且几乎总是充满。我尝试将元空间增加到1GB,这样可以提高吞吐量。
我认为正在发生的事情是,默认情况下,Metaspace设置为非常低的值,因此GC起作用了。每次发生GC时,高水位标记都会不断增加(再次是非常低的数量)。
我想设置MetaspaceSize(不确定当前值是多少)。
Oracle文档说,没有指南可以知道将MetaspaceSize设置为什么。但是有没有办法找出将其设置为正确的值呢?
我从Oracle文档中得到的一个提示是:
If the committed space available for class metadata as a percentage of the total committed space for class metadata is greater than MaxMetaspaceFreeRatio, then the high-water mark will be lowered. If it is less than MinMetaspaceFreeRatio, then the high-water mark will be raised.
但是仍然无法弄清楚如何稳定GC。.我有三个问题:
我正在寻找一种方法来下载我在 repo 中的一些 git LFS zip 文件,而不必签出整个存储库。
我尝试了以下方法:
curl -L <URL to the file RAW download on github page>
curl -L <URL from .lfsconfig file + object ID from the file's pointer information in git repo>
更多示例尝试:
curl -L https://gitlfs.es.com/api/company/myrepository/content/framework/7d5dfcf764118df4867dc676b615e1ee4bf67e5b37fd56275f8845d
curl -L https://gitlfs.es.com/api/company/myrepository/7d5dfcf764118df4d188d5838867dc676b615e1ee4bf67e5b37fd56275f8
curl -L https://gitlfs.es.com/api/company/myrepository/sha256:7d5dfcf764118df4d188d5838867dc676b615e1ee4bf67e5b37fd56275f8845d
Run Code Online (Sandbox Code Playgroud)
以上似乎都不起作用
任何线索将不胜感激。
我正在尝试通过将部署片段作为输入来对 k8s 应用程序的修补/滚动升级进行编程。我使用patch()方法将代码片段应用到现有部署上,作为使用fabric8io 的 k8s 客户端 APIS 的滚动更新的一部分。 Fabric8.iokubernetes-client版本4.10.1
我还使用了一些 loadYaml 辅助方法kubernetes-api 3.0.12.
这是我的示例片段 - adminpatch.yaml 文件:
kind: Deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
spec:
containers:
- name: ${PATCH_IMAGE_NAME}
image: ${PATCH_IMAGE_URL}
imagePullPolicy: Always
Run Code Online (Sandbox Code Playgroud)
我将上述文件内容(替换了所有占位符)作为字符串发送到 patchDeployment() 方法。这是我对 fabric8 patch() 方法的调用:
public static String patchDeployment(String deploymentName, String namespace, String deploymentYaml) {
try {
Deployment deploymentSnippet = (Deployment) getK8sObject(deploymentYaml);
if(deploymentSnippet instanceof Deployment) {
logger.debug("Valid deployment object.");
Deployment deployment = getK8sClient().apps().deployments().inNamespace(namespace).withName(deploymentName) …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据构建参数(DEBUG_ENABLED)公开 Dockerfile 内的调试端口。该映像最终进入集群上的 k8s pod,其中有多个 pod 为各种应用程序运行。我正在尝试基于构建参数公开所有图像中的端口。
这是我的 Dockerfile:
ARG DEBUG_ENABLED=true
:
:
EXPOSE 8080
RUN if [ "$DEBUG_ENABLED" = "true" ] ; \
then EXPOSE 8000 ; \
else echo "debug is set to false"; \
fi
ENTRYPOINT ["catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)
我知道“EXPOSE”语句在构造中不起作用RUN if...。但有没有办法实现我想要做的事情?
我正在尝试将此(简化)代码翻译为使用Java-8流:
Map<String, String> files = new ConcurrentHashMap<String, String>();
while(((line = reader.readLine()) != null) {
if(content != null)
files.put("not null"+line, "not null"+line);
else
files.put("its null"+line, "its null"+line);
}
reader.close();
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
files = reader.lines().parallel().collect((content != null)?
(Collectors.toConcurrentMap(line->"notnull"+line, line->line+"notnull")) :
(Collectors.toConcurrentMap(line->line+"null", line->line+"null")));
Run Code Online (Sandbox Code Playgroud)
但是上面给出了所有line->line+"..."on intelliJ 的"循环推理"消息.什么是循环推理?这个逻辑中有错误吗?
我在SO上注意到了一些类似的问题.但他们建议使用接口(Map)而不是其实现.但files这里被宣布为Map.
更新:添加更多上下文,content是一个包含目录名称的String.files是一个包含多个文件路径的地图.需要进入files映射的文件路径取决于content是否填充了目录名.
我最近开始学习Java-8流.我正在寻找一个庞大的代码库,并试图找出在哪里可以使用流来提高性能.
根据我的理解,用流替换每个循环都没有意义,因为流并不总是比循环更好.以下几个案例我认为是有益的:
Run Code Online (Sandbox Code Playgroud)while(iterate over a collection) { if(certain condition is met) { //do some computation } else { //do nothing } }
在这里使用流可以避免在这里加载集合中不必要的成员.(更快,更高效)
如果我错了,请纠正我.我正在寻找更多此类案例......
我正在尝试使用slick库实现Slider Syncing .我有一组pictures来自后端的图像.我循环遍历这些图像,将它们填充在我slider-for和slider-navdiv 之下.
HTML代码:
<head>
<style>
.slick-arrow {
color: #666666;
background: red;
}
.slider-for {
max-width: 960px;
margin-left: auto;
margin-right: auto;
margin-top: 5%;
}
.slider-nav h1 {
display: inline-block;
}
.slider-nav .slick-slide {
text-align: center;
width: 337px;
}
.container {
margin-bottom: 5%;
margin-top: 5%;
}
</style>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.7/slick.css"/>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/jquery.slick/1.5.7/slick-theme.css"/>
</head>
<div class="container-fluid padding25">
<h2>Pictures</h2>
<div class="slider-for">
<% var index = 0;%>
<%_.each(pictures, function(picture) { %>
<div> …Run Code Online (Sandbox Code Playgroud) 我不小心用mv重命名了一个git下的文件.我将文件从小写重命名为大写,保持名称相同.
mv abc.java ABC.java
之后我也做了更改并提交了文件.
我现在如何对该文件进行实际的git重命名?Git bash似乎不理解ABC.java和abc.java之间的区别.
我不确定master(由其他人)发生了什么变化,但在转移到分支后,我无法将更改提交给文件.它说旧的文件索引仍然存在.
$ git commit -m"重命名为大写"ABC.java致命:不会添加文件别名'dir1/ABC.java'('dir1/abc.java'已存在于索引中)
当我执行git状态时,它会显示重命名的文件但不允许我提交重命名的文件.如果我尝试删除abc.java(实际上至少在本地不存在),再次(我认为由于不区分大小写)git删除新的.
如果我克隆了一个新的repo,那么repo仍然会删除带有旧名称(abc.java)的文件,但是我的所有更改都会在其中出现最近失败的文件.
java ×5
java-8 ×5
java-stream ×4
docker ×2
dockerfile ×2
git ×2
lambda ×2
maven ×2
carousel ×1
css ×1
debugging ×1
docker-build ×1
fabric8 ×1
file-io ×1
git-branch ×1
git-lfs ×1
git-mv ×1
git-reset ×1
github ×1
javascript ×1
jquery ×1
kubernetes ×1
maven-3 ×1
memory-leaks ×1
metaspace ×1
newline ×1
regex ×1
replaceall ×1
slick.js ×1