小编dpr*_*dpr的帖子

使用 gradle 中的 maven-publish 插件生成 SHA512 校验和文件

maven-publish默认情况下,该插件为所有工件生成 MD5 和 SHA1 校验和文件。但是有什么方法可以让插件生成安全的校验和文件(首选 SHA512)?

这很容易重现。我刚刚初始化了一个新java-library项目并添加了maven-publish插件及其配置

构建.gradle:

apply plugin: 'java'
apply plugin: 'maven-publish'

repositories {
  jcenter()
}

dependencies {
}

publishing {
  repositories {
    maven {
      url rootProject.buildDir.path + '/repo'
    }
  }
  publications {
    mavenJava(MavenPublication) {
      groupId = 'org.gradle.sample'
      artifactId = 'project1-sample'
      version = '1.1'

      from components.java
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经查阅了 gradle 文档和 javadoc,但根本找不到关于校验和文件的任何提示。我知道我可以使用这样的 ANT 校验和任务很容易地为工件生成校验和

doLast {
  ant.checksum(file: archivePath, algorithm: "SHA-512")
}
Run Code Online (Sandbox Code Playgroud)

但是我会以某种方式需要将它们“手动”放在正确的文件夹中,而不是实际的工件,这是我想避免的。


编辑
如果无法指定校验和算法,是否可以以某种方式挂钩publish任务并将自定义校验和文件添加到工件目标文件夹中?我不想将校验和文件本身添加为工件,因为校验和会有 MD5 和 SHA1 校验和,这是没有意义的。

java checksum sha512 gradle maven

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

Docker无法启动,因为存在具有ID的Docker容器?

将Docker升级到Docker版本17.06.2-ce后,我的Docker容器无法重新启动。错误消息和我的撰写文件如下:

Starting wordpress ... error
Starting mysql     ... error

ERROR: for wordpress  Cannot start service wordpress: oci runtime error: container with id exists: 
b3951fd8b599c273f39d3b29085d525828a92dabe518f42860ba6535d5edad6e


ERROR: for mysql  Cannot start service mysql: oci runtime error: container with id exists: be9c3682bb66720c8015cfe9e9025c68a917204444e9b77f68b63d84f0469b71


======================
Run Code Online (Sandbox Code Playgroud)

泊坞窗的撰写文件为:

services:
  wordpress:
    image: wordpress
    restart: always
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_PASSWORD: xxx

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxx
Run Code Online (Sandbox Code Playgroud)

我已重新启动实例,但无法正常工作。需要你的帮助!

docker

6
推荐指数
3
解决办法
8373
查看次数

如何向基于Tyrus注释的客户端添加请求标头

我正在尝试使用带有基于注释的客户端端点的tyrus独立客户端(tyrus-standalone-client-1.9)访问websocket服务器端点.我主要是关注这个例子.

也就是说,我的客户端端点目前看起来像

@ClientEndpoint
public class MyClientEndpoint {

    private static CountDownLatch latch;

    private Logger logger = Logger.getLogger(this.getClass().getName());

    @OnOpen
    public void onOpen(Session session) throws Exception {
        session.getBasicRemote().sendText("initialRequest")
    }

    @OnMessage
    public void onMessage(String message, Session session) throws Exception {
        // do something
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        logger.info(String.format("Session %s close because of %s", session.getId(), closeReason));
        latch.countDown();
    }

    public static void main(String[] args) {
        latch = new CountDownLatch(1);

        ClientManager client = ClientManager.createClient();
        try {
            URI serverEndpointUri = new …
Run Code Online (Sandbox Code Playgroud)

java header websocket tyrus jsr356

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

如何正确终止xvfb-run

为了执行与一些JavaScript单元测试因缘泊坞窗容器内(基于Ubuntu 14.04),我使用的是火狐开始在容器卡玛-脚本启动xvfb-run.启动脚本如下所示:

#!/bin/bash
set -o errexit 

# nasty workaround as xvfb-run doesn't cleanup properly...
trap "pkill -f /usr/lib/firefox/firefox" EXIT

xvfb-run --auto-servernum --server-args='-screen 0, 1024x768x16' firefox $1
Run Code Online (Sandbox Code Playgroud)

启动浏览器并执行单元测试非常有效.在执行测试后,karma终止了生成的浏览器实例 - 在我的例子中是通过xvfb-run启动firefox的脚本.

在上面的脚本中,你可以看到我trap在我的脚本退出时注册了一个杀死启动的firefox.这是有效的,但脚本不是一个非常好的公民,因为它终止当前正在运行的所有 firefox实例,而不是仅仅终止脚本启动的一个实例.我首先试图杀死xfvb-run进程,但是杀死这个进程对xvfb-run脚本启动的子进程没有影响......

如果我xvfb-run手动启动firefox,则会产生一堆生成的进程:

root@1d7a5988e521:/data# xvfb-run --auto-servernum --server-args='-screen 0, 1024x768x16' firefox &
[1] 348
root@1d7a5988e521:/data# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 bash
  348 ?        S      0:00 /bin/sh /usr/bin/xvfb-run --auto-servernum --server-args=-screen 0, 1024x768x16 …
Run Code Online (Sandbox Code Playgroud)

bash xvfb

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

使用工件名称解压缩 gradle 依赖项

我正在寻找一种方法将特定配置的项目依赖项提取到工作区文件夹中。由于可能存在多个依赖项,我想将每个工件提取到具有工件名称的文件夹中。我试图在 python 的上下文中解决这个问题,但这个问题并不是真正与 python 相关......

目前我的 gradle 文件如下所示:

configurations { python }

dependencies {
  python group: 'github.dpeger', name: 'py-utils', version: '1.6', ext: 'zip'
  python group: 'github.dpeger', name: 'py-test', version: '1.6', ext: 'zip'
}

task cleanPythonDependencies(type: Delete) { delete 'lib/python' }
tasks.clean.dependsOn cleanPythonDependencies

task importPythonDependencies(type: Copy) {
  dependsOn cleanPythonDependencies
  from {
    configurations.python.collect { zipTree(it) }
  }
  into 'lib/python'
}
Run Code Online (Sandbox Code Playgroud)

然而,这会将python配置中的所有依赖项提取到文件夹中lib\pyhton,而不使用工件的名称。

我想要的是py-utils被提取到lib\pyhton\py-utils和。py-testlib\pyhton\py-test

dependencies unzip gradle

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

无法更改配置的依赖关系

添加copyBootstrapbuild.gradle我之后,我 在尝试运行构建任务时遇到下一个错误:

FAILURE:构建因异常而失败.

  • 什么地方出了错:

配置根项目时出现问题'.在依赖解析中包含配置后,无法更改配置':providedCompile'的依赖关系.

怎么可以解决这个问题?我在互联网上搜索但没有找到解决方案.我copyBootstrap这个链接得到了任务.他们的目标是从org.webjars组罐中提取所有内容到特定路径.

我正在使用Gradle 3.2和Intellij IDEA 2016.2.5

//group 'org'
//version '1.0-SNAPSHOT'

task wrapper(type: Wrapper) {
  gradleVersion = '3.2'
  distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
}


buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'org.akhikhl.gretty:gretty:1.4.0'
    }
}

repositories {
    mavenCentral()
    jcenter()
}

//apply plugin: 'java'
//apply plugin: 'eclipse-wtp'
//apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
apply plugin: 'war'
apply plugin: 'org.akhikhl.gretty'


sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {

    //compile …
Run Code Online (Sandbox Code Playgroud)

intellij-idea gradle gretty

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

异步执行长时间运行的 liquibase 数据库更新

我们使用 liquibase 来管理应用程序底层关系数据库结构的变化。我们使用 PostgreSQL 作为数据库后端。

现在有包含数百万条目的表,我们需要为其中一些大型表添加索引。由于表的大小,索引创建需要相当长的时间。这会阻止应用程序启动,因为 liquibase 变更集是在应用程序的启动阶段执行的,以确保在应用程序实际运行之前有适当的持久性后端可用。

虽然由于显而易见的原因需要在应用程序启动之前进行结构更改,但可以在应用程序已经运行时添加索引。因此我的问题是:

有没有办法与 liquibase 异步执行索引创建?

我们已经尝试使用CONCURRENTPostgreSQL 提供的选项。这有助于在应用程序运行时创建索引,因为索引创建不会锁定相应的表。但相应的 liquibase 变更集仍将等待索引创建完成,然后才能执行下一个变更集。

java postgresql asynchronous liquibase

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

捕获多个异常,而不是在混淆的构建中捕获异常

我使用了具有多个异常的catch块,这在未经模糊处理的构建中工作正常,但在模糊构建中没有捕获异常.

我正在使用proguard-maven-plugin

try {
  ...
} catch (ServletException | IOException e){
  ...
}
Run Code Online (Sandbox Code Playgroud)

我需要为此添加任何proguard规则吗?

因为它的工作正常当我编写我的代码时

try {
  ...
} catch (ServletException e) {
  ...
} catch (IOException e) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

java obfuscation try-catch proguard

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

如何解决tomcat的问题?Spring-Boot“扫描失败”

这是我的第一个 spring-boot 项目,我在使用 tomcat 时遇到了问题。服务器不想启动。项目中没有使用玻璃鱼,这个消息我越发惊讶。该项目是在 Maven 中创建的。我已经坐了好几个小时了,但我找不到问题所在。任何人都可以帮助我吗?

2019-12-11 16:21:30.775  WARN 10436 --- [           main]         o.a.tomcat.util.scan.StandardJarScanner  : Failed to scan [file:/C:/Users/maxwell/.m2/repository/org/glassfish/hk2/hk2/2.6.1/hk2-utils.jar] from classloader hierarchy

java.io.IOException: java.lang.reflect.InvocationTargetException
  at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:236) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
Run Code Online (Sandbox Code Playgroud)

这是我的 pom.xml 文件:

2019-12-11 16:21:30.775  WARN 10436 --- [           main]         o.a.tomcat.util.scan.StandardJarScanner  : Failed to scan [file:/C:/Users/maxwell/.m2/repository/org/glassfish/hk2/hk2/2.6.1/hk2-utils.jar] from classloader hierarchy

java.io.IOException: java.lang.reflect.InvocationTargetException
  at org.apache.tomcat.util.compat.Jre9Compat.jarFileNewInstance(Jre9Compat.java:236) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
Run Code Online (Sandbox Code Playgroud)

java spring tomcat spring-boot tomcat9

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

Gradle 无法使用 overwrite:true 覆盖任务

我想创建一个 build.gradle 文件,它将加载另一个文件。

第二个文件应该有“defaulttasks”,这意味着当第一个文件中不存在任务时它们应该执行。

文件一:

apply from ("..otherfile.gradle")
task "hello"(overwrite: true) {
  doFirst{
    println "hello from here"
  }
}
Run Code Online (Sandbox Code Playgroud)

第二个文件:

task "hello" {
  doFirst{
    println "i am the old one"
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它失败了

原因:java.lang.IllegalStateException:不支持替换可能已被其他插件使用的现有任务。为此任务使用不同的名称(“hello”)。

所以我尝试将第二个文件而不是任务更改为tasks.register("hello")

之后它不会失败,但它也会执行第二个。如何覆盖任务以使默认任务不再运行?

groovy overriding overwrite gradle

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