小编jwa*_*jwa的帖子

网站列出Maven传递依赖关系

在我的组织内部,我受到IT安全机构的严格监管.因此,禁止所有访问maven镜像.但是,我可以提供我需要的依赖项的详细信息,以便IT安全人员可以执行其检查/扫描,并希望为我下载二进制文件.

然后我在我的本地maven repo中安装这些,这意味着它们可以在防火墙内免费提供给我的团队.

maven的美妙之处在于它可以识别和下载传递依赖.但是,如果无法访问外部POM文件,我无法通过maven dependency:tree执行这些检查.

因此,我必须一次一个地向IT部门提供依赖项.鉴于某些依赖链的深度,这可能需要相当长的时间才能回归/转发IT.或者,我在家里做依赖:树,并自己邮寄结果.

我想知道是否有人对我可以查询此信息的网站有任何建议?所以,如果我想(比如)log4j:1.2.17,它会告诉我我还需要请求javax.mail:mail:1.4.3.

maven

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

CompletableFuture-汇总未来的快速失败

我一直在使用CompletableFuture.allOf(...)帮助程序来创建汇总期货,这些期货只有在其复合期货标记为已完成时才会变为“完成”,即:

CompletableFuture<?> future1 = new CompletableFuture<>();
CompletableFuture<?> future2 = new CompletableFuture<>();
CompletableFuture<?> future3 = new CompletableFuture<>();

CompletableFuture<?> future = CompletableFuture.allOf(future1, future2, future3);
Run Code Online (Sandbox Code Playgroud)

我希望对此功能稍作更改,在以下情况下,总的未来市场是完整的:

  • 所有期货均已成功完成
  • 任何一个未来都没有成功完成

在后一种情况下,合计期货应立即(例外)完成,而不必等待其他期货完成(即快速失败)

为了说明这一点,请CompletableFuture.allOf(...)考虑一下:

// First future completed, gotta wait for the rest of them...
future1.complete(null);
System.out.println("Future1 Complete, aggregate status: " + future.isDone());

// Second feature was erroneous! I'd like the aggregate to now be completed with failure
future2.completeExceptionally(new Exception());
System.out.println("Future2 Complete, aggregate status: " + future.isDone());

// Finally complete …
Run Code Online (Sandbox Code Playgroud)

java java.util.concurrent completable-future

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

Dockerfile RUN 命令跨操作系统的兼容性 (apt-get)

初学者的问题;Docker 在使用命令时如何处理底层操作系统的变化RUN

我们以一个非常简单的JRE 1.8官方 Docker Hub Dockerfile 为例。在安装 java 包时,Dockerfile 使用apt-get

RUN apt-get update && apt-get install -y --no-install-recommends ...
Run Code Online (Sandbox Code Playgroud)

对于未经训练的人来说,这似乎是特定于平台的指令,仅适用于基于 Debian 的操作系统(或至少安装了 APT 的操作系统)。

这在 CentOS 安装上到底如何工作,例如,包管理器在哪里yum?或者上帝保佑,像Solaris这样的东西。


如果这种使用 fork 任意 shell 命令的模式RUN在 docker 中很普遍,那么如何避免平台间甚至版本间的依赖关系呢?

即,如果 Dockerfile 编写者拥有比我更新的版本grep,并且他们使用了一些早期版本中不可用的新 CLI 标志,该怎么办?

唯一的两个结果可能是:(1) RUN 命令以非零退出代码退出 (2) Dockerfile 在运行命令之前更改了 grep 的安装版本。

docker dockerfile

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

Angular2路由路径样式参数

使用该@angular/router版本3.0.0-beta.2我想构建一个允许我的用户浏览文件系统的应用程序.

以下说明了我想支持的URL类型:

http://myapp/browse                   <--- Browse without parameters, lists root dir
http://myapp/browse/animals           <--- Browse "animals" subdirectory
http://myapp/browse/animals/mammals   <--- Browse "animals/mammals" subdirectory
Run Code Online (Sandbox Code Playgroud)

我正在努力想出一个使用它来配置它的机制RouterConfig.


路径式参数

{ path: 'browse/:path', component: BrowserComponent }
Run Code Online (Sandbox Code Playgroud)

RouterConfig仅支持单个子目录,即browse/animals.但是,如果我尝试浏览到第二级子目录,/browse/animals/mammals我会收到以下错误:

Error: Cannot match any routes: '/browse/animals/mammals'
Run Code Online (Sandbox Code Playgroud)

我知道路由器中参数的默认行为(在这种情况下:path)是在第一个正斜杠上"中断",并假设以下标记是子路径.

如何配置路由器以允许:path参数接受正斜杠/"gobble"整个剩余的URL作为参数?


可选参数

如何处理用户希望浏览根目录(即URL)的用例/browse.这与上述路由器配置不匹配,因为:path参数不存在.

我试图使用两个明确配置的路由器路径来解决这个问题:

{ path: 'browse', component: BrowserComponent },
{ path: 'browse/:path', component: BrowserComponent }
Run Code Online (Sandbox Code Playgroud)

但是,这引起了我的问题routerLinkActive.我有一个主菜单,其中包含指向浏览器的链接,如下所示:

<a [routerLink]="['/browse']" [routerLinkActive]="['active']">...</a>
Run Code Online (Sandbox Code Playgroud)

active如果用户浏览到根目录 …

angular2-routing angular

5
推荐指数
2
解决办法
2657
查看次数

elasticsearch:找不到索引数据(单元节点已关闭)

我正在尝试开始使用elasticsearch(一直是一个长期的指南针用户)而且我在基础知识方面遇到了一些相当严重的问题,这非常令人沮丧.

我面临的当前问题是,在节点关闭之后,索引数据才会显示.这是我的代码示例

Node node = nodeBuilder().node();
Client client = node.client();

client.prepareIndex("index1", "type1", "1").setSource("{ \"name\": \"Aaron\"}").execute().actionGet();
client.prepareIndex("index1", "type1", "2").setSource("{ \"name\": \"Andrew\"}").execute().actionGet();
client.prepareIndex("index1", "type1", "3").setSource("{ \"name\": \"Alistair\"}").execute().actionGet();

QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name", "a*");
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("index1");
searchRequestBuilder.setTypes("type1");
searchRequestBuilder.setSearchType(SearchType.DEFAULT);
searchRequestBuilder.setQuery(queryBuilder);

SearchResponse response = searchRequestBuilder.execute().actionGet();
System.out.println("Response contains " + response.getHits().totalHits() + " hits");
for (SearchHit currentHit : response.getHits())
{
    System.out.println(currentHit.getSourceAsString());
}

client.close();
node.close();
Run Code Online (Sandbox Code Playgroud)

我第一次运行它时,它在搜索中找不到匹配.但是,如果我再次运行它 - 它确实找到所有以字母"A"开头的名称(不要让我开始自动降低索引项目,但不是搜索 - 这花了我一个多小时).

如果我卸下收盘,我运行上面多少次并不重要我从来没有找到结果.但是,如果我添加close语句,它会第二次(每次).

感觉就像没有刷新的缓冲索引更改有关吗?

我确信我遗漏了一些明显和基本的东西.但我不能把手指放在上面.

java elasticsearch

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

序列化Java 8 Streams

我想用Jackson来序列化流的输出.杰克逊没有对序列化的内在支持java.util.stream.Stream,但它能够序列化java.util.Iterator.

为了说明这个问题,我想序列化这个简单的界面:

public interface SerializeMe {
    Iterator<Integer> getMyNumbers();
}
Run Code Online (Sandbox Code Playgroud)

我将比较序列化List.iterator()与输出的输出Stream.iterator():

public class SerializeViaList implements SerializeMe {
    @Override
    public Iterator<Integer> getMyNumbers() {
        return Arrays.asList(1, 2, 3).iterator();
    }
}

public class SerializeViaStream implements SerializeMe {
    @Override
    public Iterator<Integer> getMyNumbers() {
        return Arrays.asList(1, 2, 3).stream().iterator();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下方法将演示这两个类的输出:

public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new ObjectMapper();

    System.out.println("via list: " + mapper.writeValueAsString(new SerializeViaList()));
    System.out.println("via stream: " + mapper.writeValueAsString(new SerializeViaStream()));
}
Run Code Online (Sandbox Code Playgroud)

这个输出是: …

java json jackson

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

没有参数值的路由;Angular 路由重定向 - 我可以使用 redirectTo 参数路径吗?

如果可以将 path: ' ' 重定向到 path: ':id' ,我正在徘徊?有没有办法实现这一目标?

谢谢你。

{
  path: 'folder',
  children: [
    {
      path: '',
      redirectTo: ':id',
      pathMatch: 'full',
    },
    {
      path: ':id',
      canActivate: [AuthGuard],
      component: DocumentsComponent,
    },
  ]
}
Run Code Online (Sandbox Code Playgroud)

angular-routing angular2-routing angular

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

针对Oracle数据库批处理"更新与插入"查询

假设我有一个Oracle数据库,其中有一个表,RUN_LOG我正在使用它来记录作业执行的时间.

该表具有JOB_NAME唯一标识已执行作业的主键,以及一个LAST_RUN_TIMESTAMP在上次执行作业时反映的列.

作业启动时,我想更新作业的现有行(如果存在),或者在表中插入新行.

鉴于Oracle不支持a- REPLACE INTOstyle查询,有必要尝试一个UPDATE,如果零行受到影响,请使用INSERT.

这通常通过jdbc使用以下内容实现:

PreparedStatement updateStatement = connection.prepareStatement("UPDATE ...");
PreparedStatement insertStatement = connection.prepareStatement("INSERT ...");

updateStatement.setString(1, "JobName");
updateStatement.setTimestamp(2, timestamp);

// If there are no rows to update, it must be a new job...
if (updateStatement.executeUpdate() == 0) {
    // Follow-up 
    insertStatement.setString(1, "JobName");
    insertStatement.setTimestamp(2, timestamp);
    insertStatement.executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)

这是一条相当完善的道路,我对这种方法非常满意.


但是,我们假设我的用例要求我插入大量的这些记录.对数据库执行单独的SQL查询将太"唠叨".相反,我想开始批处理这些INSERT/ UPDATE查询

鉴于UPDATE查询的执行将被推迟到批处理提交之前,我无法观察到在以后的日期有多少行受到影响.

实现这种REPLACE INTO结果的最佳机制是什么?

我宁愿避免使用存储过程,因为我更喜欢将持久性逻辑保留在这个地方(类),而不是在Java代码和数据库之间分配.

java database oracle jdbc

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

为什么git存储库管理器使用带有ssh连接的`git`用户名?

使用git存储库管理器(如GitHub,GitLab等)时,克隆项目的说明将远程的SSH连接说明为:

git@github.com:xxxx/yyyy.git
Run Code Online (Sandbox Code Playgroud)

为什么这些存储库管理员要求使用git用户名(如git@github.com),而不是使用我的特定用户名?

在验证我的请求时,必须针对所有用户的Universe检查我的公钥/私钥auth?

git github gitlab

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