小编non*_*ing的帖子

什么是maven-shade-plugin,为什么要重新定位Java包?

我发现某人的pom.xml中使用了maven-shade-plugin.我之前从未使用过maven-shade-plugin(我是Maven n00b),所以我试着理解使用它的原因及其作用.

我查看了Maven文档,但是我无法理解这句话:

"这个插件提供了将工件打包在超级jar中的功能,包括它的依赖关系和阴影 - 即重命名 - 一些依赖项的包." 页面上的文档似乎不是新手友好的.

什么是"超级罐子?" 为什么有人想制作一个?重命名依赖项包的重点是什么?我试图通过maven-shade-plugin apache页面上的示例,例如"为Uber Jar选择内容",但我仍然无法理解"着色"所取得的成就.

任何指向说明性示例/用例的指针(解释为什么在这种情况下需要着色 - 解决了什么问题)将不胜感激.最后,我什么时候应该使用maven-shade-plugin?

java jar maven maven-shade-plugin

262
推荐指数
3
解决办法
8万
查看次数

S3:再次将公用文件夹设为私有?

如何再次将AWS S3公用文件夹设为私有?

我正在测试一些临时数据,所以我在一个桶中公开了整个文件夹.我想再次限制它的访问权限.那么如何让文件夹再次保密呢?

acl amazon-s3 amazon-web-services

56
推荐指数
6
解决办法
4万
查看次数

groovy:在地图中安全地找到一个键并返回它的值

我想在给定的地图中找到一个特定的键.如果找到密钥,那么我想从地图中获取该密钥的值.

这是我到目前为止所管理的:

def mymap = [name:"Gromit", likes:"cheese", id:1234]

def x = mymap.find{ it.key == "likes" }

if(x)
    println x.value
Run Code Online (Sandbox Code Playgroud)

这是有效的,输出是"奶酪"如预期的那样.太好了,但最后我不想做x.value,我不想做if(x).我希望x以某种方式直接包含值.

我不能像这样直接获取x的值:

def mymap = [name:"Gromit", likes:"cheese", id:1234]

def x = mymap.find{ it.key == "likesZZZ" }.value

println x
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下find闭包为null,所以这会导致Null指针异常.当然,上面的代码片段可以工作it.key == "likes",但我不确定我是否总会在地图中找到目标键.

什么是"Groovier"并且在地图上安全地执行此操作:

  • 检查地图是否有给定的密钥,
  • 如果是这样,请获取此密钥的值

groovy closures dictionary

43
推荐指数
4
解决办法
9万
查看次数

Ruby on Rails代码中的缩进

我注意到Ruby on Rails代码有2个空格缩进,例如:

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      ...
      t.timestamps
    end
  end
  ...
end
Run Code Online (Sandbox Code Playgroud)

这是一个有2个空格的约定吗?(我以前用Tab缩进,通常是4个空格.)

额外奖励:有没有人知道如何在电子文本编辑器中将Tab大小从4个空格更改为2个空格?

ruby-on-rails indentation

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

groovy:更改列表的每个元素并加入

我想用单引号包装列表的每个元素并将它们连接成一个字符串.

样本输入: ["aa", "bb", "cc"]

预期产量: "'aa', 'bb', 'cc'"

我猜这可以用一个收集+闭包来完成,所以我试过:

def mylist = ["aa", "bb", "cc"]
println mylist.collect{ 'it' }.join(', ')
Run Code Online (Sandbox Code Playgroud)

但输出是:"it, it, it"这不是我想要的.

如何在列表的每个元素中附加和预先添加单引号?除收集和加入之外的任何其他oneliner(或短)groovy解决方案?

collections groovy closures

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

python:re.sub的replace函数不接受额外的参数 - 如何避免全局变量?

我正在尝试将文本文件中的所有时间戳(形式为'HH:MM:SS')增加一个命令行参数指定给我程序的秒数.

这是迄今为止我的努力的简化版本:

import re
from datetime import datetime, timedelta

time_diff = timedelta(seconds=10)

def replace_time(matchobj):
    if matchobj.group(1) not in [None, '']:
       return (datetime.strptime(matchobj.group(1), "%H:%M:%S") + time_diff).strftime("%H:%M:%S")

print re.sub('(\d\d:\d\d:\d\d)', replace_time, "01:27:55")
Run Code Online (Sandbox Code Playgroud)

这很好用:运行它的结果01:28:05就是我想要的.

但是,我听说我应该尽可能少地使用全局变量.所以我想知道是否有一种简单的方法可以time_diff作为参数传递replace_time而不是使用全局变量.

我尝试了显而易见的,但它失败了:

def replace_time(matchobj, time_diff):
    if matchobj.group(1) not in [None, '']:
       return (datetime.strptime(matchobj.group(1), "%H:%M:%S") + time_diff).strftime("%H:%M:%S")

time_diff = timedelta(seconds=10)
print re.sub('(\d\d:\d\d:\d\d)', replace_time(matchobj, time_diff), "01:27:55")
Run Code Online (Sandbox Code Playgroud)

有这个错误:NameError: name 'matchobj' is not defined所以我不能直接传递matchobj.

我看过标准的重新页面标准的re howto,但找不到我需要的信息.我怎样才能避免在这里使用全局变量?我可以以某种方式向replace_time函数传递额外的参数吗?提前致谢.

python global-variables

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

使用 Terraform 创建 AWS Amplify 资源

是否可以使用 Terraform 创建包含身份验证和存储资源的 AWS Amplify 项目?

目标是将 Android 客户端项目与使用 Terraform 模板创建的 Amplify 资源相关联。

例如:我想amplify pull从我的 Android Studio 终端将项目链接到 AWS(其中 Amplify 项目已经由 Terraform 创建)并生成配置文件。

android amazon-web-services terraform aws-amplify

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

刀:一次获得两个(或更多)属性

我目前可以通过以下方式一次获取一个节点的一个属性knife search node:

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname
# RESULT:
i-7a421114:
cloud.public_hostname: ec2-104-214-107-198.compute-1.amazonaws.com

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.local_hostname
# RESULT:
i-7a421114:
cloud.local_hostname: ip-10-60-146-201.ec2.internal
Run Code Online (Sandbox Code Playgroud)

我想通过一次调用同时检索两个属性,如下所示:

knife search node "chef_environment:production AND name:i-7a421114" -a cloud.public_hostname -a cloud.local_hostname
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,只获得一个属性.由于我几乎没有厨师/刀具知识,有人可以让我知道如何做到这一点,或其他一些方法来实现这一目标.

chef-infra knife

6
推荐指数
2
解决办法
1937
查看次数

每20次迭代更新SQL中的行

在纽约黄色TaxiCab公共数据集的 Google BigQuery中有一个约100万行的表格.从该链接可以看出,架构没有主键.每行代表一次旅行/交易,但没有customer_id字段.

我想添加一个列customer_id并向其分发随机数,以便:

For rows 1-20, `customer_id` should be assigned `1`
For rows 21-40, `customer_id` should be assigned `2`
and so on..
Run Code Online (Sandbox Code Playgroud)

换句话说,我希望表中的确切(和任何)20行具有特定值customer_id.

mysql sql google-bigquery

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

ruby:无法使用带有rspec的记录器

我正在尝试将日志记录添加到简单的rspec测试中.我正在使用Watir在规范中驱动Chrome,这很好用.我无法使用"Logger"库获取日志.

这是我的规格:

require 'rubygems'
require 'watir-webdriver'
require 'rspec'
require 'logger'

describe 'ui tests' do
  let(:browser) { browser ||= Watir::Browser.new :chrome }

  let(:log) {
    log = Logger.new(STDOUT)
    log = Logger.new('watir.tests.log', 'daily')
    log.level = Logger::DEBUG
  }

  before {
    browser.goto 'http://translate.google.com'
  }
  after { browser.close }

  context 'simple tests' do
    it 'simple test' do
      log.info("Running simple test")
      browser.text_field(:id => "source").set("ost")

      # actual test/asserts here

    end
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是我无法在示例中调用任何日志记录方法,如log.info.我收到此错误:

Failures:

  1) ui tests simple tests simple test
Failure/Error: log.info("Running simple test")
NoMethodError:
  undefined method …
Run Code Online (Sandbox Code Playgroud)

ruby logging rspec

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

groovy错误:原始类型文字:byte不能用作方法名称

我习惯于对shell上的代码进行python风格的REPL测试,我正在学习Java.我最近了解到几乎所有Java代码都可以通过groovy以REPL方式执行.到目前为止,groovy控制台帮助我快速测试我的Java代码片段.

我试图在groovy控制台中运行以下Java代码(我碰巧从另一个Stackoverflow问题得到):

String md5(String s)
{
        MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
        digest.update(s.getBytes());
        byte messageDigest[] = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i=0; i<messageDigest.length; i++)
        hexString.append(Integer.toHexString(0xFF & messageDigest[i]));

        return hexString.toString();
}

String md5hash = md5("a test message");
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此操作时,我收到以下错误消息:

基元类型文字:字节不能用作行的方法名称:5列:13.文件:ConsoleScript0 at line:6,column:13

我在SO和其他地方搜索了错误信息,但我无法获得任何线索.它似乎是有效的Java代码,为什么groovy认为我正在尝试使用"byte"作为方法名称?

我正在使用Groovy版本:1.8.4 JVM:1.6.0_26

java groovy

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