我们正在使用运行curl命令的java代码来获取一些结果.
我们已经构建了一个jar文件,jar文件执行得很好
现在,当我们尝试doker化java程序(使用jar)并在docker中运行应用程序时,我们收到此错误:
errorjava.io.IOException: Cannot run program "curl": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at com.ps.api.common.CoreAPI_Spec.executeCoreAPI(CoreAPI_Spec.java:295)
at com.ps.api.common.CoreAPI_Spec.getAccessTokens(CoreAPI_Spec.java:319)
Run Code Online (Sandbox Code Playgroud)
使用Dockerfile:
FROM ubuntu:16.04
MAINTAINER niro;
# Install prerequisites
RUN apt-get update && apt-get install -y \
curl
FROM java:8-jdk-alpine
# Set the working directory to /app
WORKDIR /Users/******/Desktop/CoreAPI_Jar
# Copy the current directory contents into the container at /app
ADD *******_Automation-0.0.1-SNAPSHOT-jar-with-dependencies.jar ******_Automation-0.0.1-SNAPSHOT-jar-with-dependencies.jar
# Run app.py when the container launches
CMD ["java", "-jar", "******-0.0.1-SNAPSHOT-jar-with-dependencies.jar"]
Run Code Online (Sandbox Code Playgroud) 通过代码完成中可见的自定义类路径容器提供的类是什么?
我已成功实现了一个自定义类路径容器,它将库添加到项目中.它将特定文件夹中的所有jar添加到构建路径,除非工作区中有一个具有相同名称的项目,在这种情况下引用项目.
现在这显然似乎有效,当我从其中一个jar中引用一个类时,代码编译,但我没有在代码完成建议中看到该类.当我在我的工作区中有正确的项目时,我在代码完成中看到了这样一个类.
我已经完成了以下步骤来实现这一目标,而我正在部分考虑IBM的教程:
当我将容器添加到项目中时,我会看到包浏览器中的jar,就像我预期的那样.(只有当没有相应的项目可用时,Jar才会出现,Logging会显示预期的结果)
我可以使用通过类路径容器集成的jar中没有编译器错误的类,它们不能用于代码完成,而在Quick Fixes中可以添加正确的导入.所以我想我可能只是错过了一些扩展点的贡献.
在Java中,当我们有两个线程共享以下变量时:
int a;
volatile int b;
Run Code Online (Sandbox Code Playgroud)
如果线程1执行:
a = 5;
b = 6;
Run Code Online (Sandbox Code Playgroud)
然后在这两条指令之间插入StoreStore屏障,并将'a'刷新回主存储器.
现在,如果线程2:
if(b == 6)
a++;
Run Code Online (Sandbox Code Playgroud)
在它之间插入一个LoadLoad屏障,我们保证如果'b'的新值可见,那么'a'的新值也是可见的.但实际上这是如何实现的呢?LoadLoad是否使CPU高速缓存/寄存器无效?或者只是指示CPU从CPU再次获取从volatile中读取的变量值?
我找到了有关LoadLoad barrier的信息(http://gee.cs.oswego.edu/dl/jmm/cookbook.html):
LoadLoad Barriers序列:Load1; LoadLoad; Load2确保在Load2访问数据和加载所有后续加载指令之前加载Load1的数据.通常,在执行推测性加载和/或无序处理的处理器上需要显式的LoadLoad障碍,其中等待加载指令可以绕过等待的存储.在保证始终保持负载排序的处理器上,障碍相当于无操作.
但它并没有真正解释如何实现这一目标.
public String filter(String message) {
if (message == null) {
return null;
}
// Remove formatting, transformer fails to handle wrong indentation correctly.
message = message.replaceAll(">\\s*[\\r\\n]+\\s*", ">");
message = message.replaceAll("\\s*[\\r\\n]+\\s*", " "); // for wrapped attribute lists
Source xmlInput = new StreamSource(new StringReader(message));
StringWriter stringWriter = new StringWriter();
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", INDENT); // for Java 6
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", INDENT.toString()); // Java 1.5
transformer.transform(xmlInput, new StreamResult(stringWriter));
String pretty = stringWriter.toString();
pretty = …Run Code Online (Sandbox Code Playgroud) 我已经解决了Y-combinator问题.刚才我发现我不能递归地引用泛型参数.
Y = ?f.(?x.f (x x)) (?x.f (x x))
Run Code Online (Sandbox Code Playgroud)
例如:
IntUnaryOperator fact = Y(rec -> n -> n == 0 ? 1 : n * rec.applyAsInt(n - 1));
IntUnaryOperator Y(Function<IntUnaryOperator, IntUnaryOperator> f) {
return g(g -> f.apply(x -> g.apply(g).applyAsInt(x)));
}
IntUnaryOperator g(G g) {
return g.apply(g);
}
// v--- I want to remove the middle-interface `G`
interface G extends Function<G, IntUnaryOperator> {/**/}
Run Code Online (Sandbox Code Playgroud)
问:如何在方法上使用泛型参数g以避免引入额外的接口G,并且泛型参数应该避免UNCHECKED警告?
提前致谢.
我有一组来自不同git存储库的java项目,我想用Jenkins构建它们.
它们共享相同的ant构建脚本,该脚本通过ant导入机制使用项目特定的配置部分(例如,编译类路径).
目前我手动共享这个,但这对于公共部分的更改非常容易出错.
所以我的问题是:在jenkins服务器上跨多个构建作业管理共享ant构建脚本的好方法是什么?
java ×6
ant ×1
concurrency ×1
docker ×1
docker-java ×1
eclipse ×1
eclipse-jdt ×1
generics ×1
java-8 ×1
jenkins ×1
volatile ×1
xml ×1
xslt ×1