小编Jef*_* Li的帖子

如何将外部jar文件添加到gradle构建脚本

现在我使用gradle作为我的构建工具.我的一个任务需要访问mysql数据库.以下是我的gradle脚本:

import groovy.sql.Sql

buildscript {
    dependencies {
        classpath files('/usr/share/java/mysql-connector-java.jar')
    }
}


task connectToDb << {
    def props = [user: 'user', password: 'password', allowMultiQueries: 'true'] as Properties
    def url = 'jdbc:mysql://mysqlhost:3306/db'
    def driver = 'com.mysql.jdbc.Driver'
    def sql = Sql.newInstance(url, props, driver)

    sql.eachRow('show tables') { row ->
        println row[0]
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试在Ubuntu Lucid框中运行它,但它总是失败.gradle抱怨信息:任务':connectToDb'的执行失败.原因:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

似乎构建脚本不包含mysql连接器jar库.任何人都可以告诉我如何正确配置外部jar文件?谢谢.

gradle

29
推荐指数
2
解决办法
4万
查看次数

如何理解Java中"发生一致性还不够"

Java语言规范的第17章中,有一节解释了为什么"在一致性不充分之前发生".这是一个例子:

At first,  x = y = 0
Thread 1            | Thread 2
r1 = x;             | r2 = y; 
if (r1 != 0) y = 1; | if (r2 != 0) x = 1;
Run Code Online (Sandbox Code Playgroud)

这是一个可能的执行跟踪:

r1 = x;  // sees write of x = 1
y = 1;
r2 = y;  // sees write of y = 1
x = 1; 
Run Code Online (Sandbox Code Playgroud)

怎么会发生这种情况?令我困惑的是,当第一个动作看到x = 1时,是不是意味着条件r2!= 0变为真,因此y被分配给1?但按顺序,在r1 = x之后,y = 1.我在哪里弄错了理解这个例子?我该如何正确理解这个例子呢?

java parallel-processing concurrency x86 jvm

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

是否可以使用gdb和qemu同时调试linux用户空间程序和内核空间?

到目前为止,使用gdb + qemu,我可以进入/超过linux内核源代码.是否可以同时调试用户空间程序?例如,从用户空间到内核空间单步执行一个程序,这样我可以通过发出来观察qemu监视器上寄存器的变化info registers

debugging gdb qemu linux-kernel

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

使用nodejs客户端访问golang websocket服务器

我是NodeJS的新手.假设我有一个使用Golang的websocket包实现的echo服务器:

package main

import (
    "code.google.com/p/go.net/websocket"
    "log"
    "net/http"
)

func EchoServer(ws *websocket.Conn) {
    var msg string
    websocket.Message.Receive(ws, &msg)
    log.Printf("Message Got: %s\n", msg)
    websocket.Message.Send(ws, msg)
}

func main() {
    http.Handle("/echo", websocket.Handler(EchoServer))
    err := http.ListenAndServe(":8082", nil)
    if err != nil {
        panic(err.Error())
    }
}

nodejs客户端代码应该是什么样的?

go websocket node.js

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

恐怖线程安全吗?

我知道errno是线程安全的。在Linux中,还有另外两个类似的功能,即strerror和strerror_r。根据Linux System ProgrammingRobert Lover 的书,strerror不是线程安全的,而strerror_r是线程安全的。所以我想知道perror是否是线程安全的。

c unix linux posix posix-api

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

linux虚拟内存用户/内核空间在x86_64中拆分

/proc/cpuinfo可以看到,当前Linux仅使用48位虚拟地址大小。根据/Documentation/x86/x86_64/mm.txt,内核虚拟地址开始于ffff800000000000-ffff80ffffffffff(= 40位)保护孔。怎么理解?我看到有一行读起来hole caused by [48:63] sign extension。这是否意味着内核在遇到虚拟地址时只会解释低48位而忽略高16位?

kernel x86-64 virtual-memory linux-kernel

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

为什么c++源代码可以在没有extern“C”的情况下调用c代码?

这是一个调用linux c函数的cpp应用程序。我用 g++ 4.7 在 linux 中编译并运行它。有用。我不擅长c++。但我听说当你想从c++源文件中调用c函数时,你需要声明'extern“C”'。为什么这个程序有效?

#include <unistd.h>
#include <iostream>

using namespace std;

int main(int argc, const char **argv) {
    rmdir("t");
    cout << "Hello" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ linux

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

为什么posix-spawn强制在linux中使用vfork?

我查看了posix-spawn(https://github.com/rtomayko/posix-spawn)的代码,似乎它在低级实现中使用了vfork.但是,不鼓励vfork在linux平台中使用. posix-spawn模块可以吗?

ruby linux

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