小编A.R*_*K.S的帖子

如何使用流读取文件时保留换行符 - java 8

      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".

java newline replaceall java-8 java-stream

9
推荐指数
1
解决办法
4683
查看次数

--mount=type=buildkit 中的缓存

我正在尝试从 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)

maven docker dockerfile docker-build

9
推荐指数
1
解决办法
9331
查看次数

使用Stream-Java 8替换文件中的文本

我正在尝试编写一个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)

我希望它只会写入修改后的文件(因为它在管道中),并保持其他行不变.

但它似乎截断文件中每一行的文件,并仅保留最后一个处理的行并删除管道中未匹配的所有行.

有没有我在使用流处理文件时缺少的东西?

java regex file-io java-8 java-stream

7
推荐指数
2
解决办法
1万
查看次数

如何关闭maven项目的传递依赖?

我遇到了JIRA帖子,它提供了一个解决方案,在POM的每个依赖项标签中都包含了排除标记.

但是我有大量的项目,每个项目都有大量的依赖标记.<exclusion>在每个依赖标记中包含它是不可行的.

问题:有没有办法全局关闭maven中传递依赖项的导入?

maven-3 maven transitive-dependency

7
推荐指数
1
解决办法
3547
查看次数

设置MetaspaceSize的准则-Java 8

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。.我有三个问题:

  1. 64位服务器上的默认MetaspaceSize是什么?
  2. 默认比率是什么:MaxMetaspaceFreeRatio,MinMetaspaceFreeRatio设置为?答:它显示最小为40,最大为70
  3. 如何确定一个Metaspacesize值?

java memory-leaks out-of-memory java-8 metaspace

7
推荐指数
3
解决办法
3990
查看次数

无需结帐即可下载 Git LFS 文件

我正在寻找一种方法来下载我在 repo 中的一些 git LFS zip 文件,而不必签出整个存储库。

我尝试了以下方法:

curl -L <URL to the file RAW download on github page>

  • 这将下载一个 html 文件而不是实际文件。

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)

以上似乎都不起作用

任何线索将不胜感激。

git git-lfs

7
推荐指数
1
解决办法
861
查看次数

Fabric8io K8s java 客户端是否支持使用 YAML 片段的 patch() 或 rollingupdate()?

我正在尝试通过将部署片段作为输入来对 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)

fabric8 kubernetes

6
推荐指数
1
解决办法
708
查看次数

有条件地在 Dockerfile 中公开端口

我正在尝试根据构建参数(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...。但有没有办法实现我想要做的事情?

debugging docker dockerfile

5
推荐指数
1
解决办法
1751
查看次数

使用流有条件地填充地图 - Java 8

我正在尝试将此(简化)代码翻译为使用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 lambda intellij-idea java-8 java-stream

4
推荐指数
1
解决办法
883
查看次数

我什么时候应该去Java-8 Streams?

我最近开始学习Java-8流.我正在寻找一个庞大的代码库,并试图找出在哪里可以使用流来提高性能.

根据我的理解,用流替换每个循环都没有意义,因为流并不总是比循环更好.以下几个案例我认为是有益的:

  1. 只有集合中的某些元素会导致更多的计算.
while(iterate over a collection) 
{  
    if(certain condition is met) {  //do some computation  } 
    else { //do nothing       }
}
Run Code Online (Sandbox Code Playgroud)

在这里使用流可以避免在这里加载集合中不必要的成员.(更快,更高效)

  1. 当我们想要在集合中收集结果时,结果顺序无关紧要,每次迭代都是独立的(无状态).如果计算是CPU密集型的,我们在这里使用并行流,我相信它会更高效.

如果我错了,请纠正我.我正在寻找更多此类案例......

java lambda java-8 java-stream

4
推荐指数
1
解决办法
484
查看次数

光滑的滑块图像仅在单击光滑箭头后加载

我正在尝试使用slick库实现Slider Syncing .我有一组pictures来自后端的图像.我循环遍历这些图像,将它们填充在我slider-forslider-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)

javascript css jquery carousel slick.js

3
推荐指数
1
解决办法
6954
查看次数

无法提交文件,意外地用mv重命名

我不小心用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)的文件,但是我的所有更改都会在其中出现最近失败的文件.

git github git-reset git-branch git-mv

1
推荐指数
1
解决办法
1797
查看次数