我正在开发一个使用EJB2s的项目.创建的EJB Jars需要在应用程序服务器捆绑在war/ear中并进行部署之前进行其他处理.
我已经创建了一个自定义任务,如果我明确地调用它(gradle ejbDeploy),它可以进行额外的处理,但是很难将它安装到gradle多项目生命周期中.我需要以某种方式将它添加到构建图中,以便在jar任务之后自动执行.
我的第一次尝试是将它添加到jar中
jar.doLast{
ejbDeploy.execute()
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于任意代码块,但不适用于任务
推荐的解决方案是什么?我看到三种方法:
有推荐的方法吗?
谢谢!
试图用Joda DateTimes生成JooQ POJO,并且遇到了一些问题.POJO使用默认的java.sql.TimeStamp值而不是DateTimes来自生成器.
代码如下.
创建表 - 此处的时间戳字段的名称已更改 - 希望确保我没有在构建系统中的某个位置访问缓存.此名称仍应使用以下正则表达式进行匹配.
CREATE TABLE nonsense (
name VARCHAR(50) NOT NULL,
DATETIME_TEST TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
id UUID NOT NULL,
PRIMARY KEY(id)
);
Run Code Online (Sandbox Code Playgroud)
转换类 - 基于文档.
public class LocalDateTimeConverter implements Converter<Timestamp, LocalDateTime> {
@Override
public LocalDateTime from(Timestamp databaseObject) {
return new LocalDateTime(databaseObject.getTime());
}
@Override
public Timestamp to(LocalDateTime dt) {
return new Timestamp(dt.toDateTime().getMillis());
}
@Override
public Class<Timestamp> fromType() {
return Timestamp.class;
}
@Override
public Class<LocalDateTime> toType() {
return LocalDateTime.class;
}
}
Run Code Online (Sandbox Code Playgroud)
Jooq配置XML.基于文档(感谢抓住我的表达/表达错误卢克)!
<configuration>
<generator>
<database> …Run Code Online (Sandbox Code Playgroud) 在app.conf中配置bind-hostname和bind-port,如Akka FAQ所指定的,并启动集群,我收到一个错误:
[ERROR] [07/09/2015 19:54:24.132] [default-akka.remote.default-remote-dispatcher-20]
[akka.tcp://default@54.175.105.30:2552/system/endpointManager/reliableEndpointWriter-akka.tcp%3A%2F%2Fdefault%4054.175.105.30%3A2552-757/endpointWriter]
dropping message [class akka.actor.ActorSelectionMessage]
for non-local recipient[Actor[akka.tcp://default@54.175.105.30:32810/]]
arriving at [akka.tcp://default@54.175.105.30:32810]
inbound addresses are [akka.tcp://default@54.175.105.30:2552]
Run Code Online (Sandbox Code Playgroud)
这似乎是说演员收到了一条发往端口32810(外部端口)的消息,但由于内部端口(2552)不匹配而丢弃了它.
该文件的相关部分是:
hostname = 54.175.105.30
port = 32810
bind-hostname = 172.17.0.44
bind-port = 2552
Run Code Online (Sandbox Code Playgroud)
我在2.4-M1,2.4-M2和2.4-SNAPSHOT上试过这个,都具有相同的效果.
有没有其他人遇到过这个?有什么建议?
编辑:此actor系统在Docker容器中的ECS中运行.docker container配置设置为从短暂范围转发到容器私有IP上的2552.ECS成功将hostname:port映射到bind-hosname:bind-port.该actor已成功运行并绑定到本地bind-hostname和bind-port,但正在丢弃消息并发出上述错误.
我正在尝试使用 NPM 将依赖模块 B 与其依赖项 A 链接起来。以此为指导,我完成了以下操作。
项目A定义为:
{
"name": "typescript-link-failure-a",
"version": "1.0.0",
"description": "",
"main": "dist/A.js",
"typescript": "dist/A.d.ts",
"scripts": {
"setup": "npm link"
},
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-typescript": "^2.13.6",
"merge2": "^1.0.2"
}
}
Run Code Online (Sandbox Code Playgroud)
A.ts
export class A {
"foo":string;
}
Run Code Online (Sandbox Code Playgroud)
npm run-script setup执行以创建从此目录到全局 node_modules 的链接。
在项目B中:
{
"name": "typescript-link-failure-b",
"version": "1.0.0",
"description": "",
"main": "dist/B.js",
"scripts": {
"preinstall": "npm link ../A"
},
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.1",
"gulp-typescript": …Run Code Online (Sandbox Code Playgroud) 今天偶然发现,认为这可能值得讨论.
用于从列表中获取单个项目的Python习惯用法
它有时会发生在我有一个列表的代码中,让我们调用它
stuff,我肯定知道这个列表只包含一个项目.我想得到这个项目并把它放在一个变量中,称之为它.最好的方法是什么?在过去我曾经这样做过:Run Code Online (Sandbox Code Playgroud)thing = stuff[0]但我认为这不是最好的习语.我想出了一个更好的一个:
Run Code Online (Sandbox Code Playgroud)(thing,) = stuff为什么这个更好?
可读性:它让读者知道东西只有一个元素.
自由断言:它使得Python断言
stuff只有一个元素,所以如果我错误地在我的原始假设中stuff只有一个元素,那么Python会对我大喊大叫,然后它会在程序中的其他位置显示为一个难以发现的错误.很难错过:前面的方法最后有一个
[0].现在,这很容易在一条线上注意到thing = stuff[0].但如果这条线路像这样凌乱的话会怎么样:Run Code Online (Sandbox Code Playgroud)thing = some_dict[my_object.get_foobar_handler()][0]在这种情况下,最后的[0]很容易遗漏,因为当随便看一下代码时,它似乎可能连接到该函数调用或dict查找.因此,读者可能会错过这样一个事实,即我们从列表中取出一个项目.在这种情况下,这会更好:
Run Code Online (Sandbox Code Playgroud)(thing,) = some_dict[my_object.get_foobar_handler()]任何"集合"的常规(指向Ulrik的道具,注意到这一点):即使东西是集合或任何其他类型的集合,此方法也有效.
stuff[0]不会对集合起作用,因为set不支持按索引号访问.玩得开心!
(http://blog.garlicsim.org/post/1198230058/python-idiom-for-taking-the-single-item-from-a-list)
总的来说,我对这个想法很不满意.他对自由断言和增加的可读性做出了令人信服的论证(如果它成为一种模式).另一方面,直到/如果它变得流行,它有点难以阅读.
社区的想法是什么?
我有一个自定义任务来执行Websphere EJBDeploy.我已经定义了输入和输出,并获得了成功的增量编译,但是我无法让自动生成的清理任务正常工作.
根据文档,对于具有已定义输出的名为"ejbDeploy"的自定义任务,应自动生成 cleanEjbDeploy 任务.
Pattern: clean<TaskName>: Cleans the output files of a task.
Run Code Online (Sandbox Code Playgroud)
所以这是我的自定义任务:
task ejbDeploy(dependsOn: 'jar'){
srcFile = file(jar.archivePath)
destDir = new File("build/ejbDeploy")
inputs.file srcFile
outputs.dir destDir
def cp = project.files(
project.sourceSets.main.output.classesDir,
project.sourceSets.main.resources,
project.configurations.runtime
).getAsPath()
doLast{
destDir.mkdirs()
exec{
executable = wasEjbDeploy
workingDir = destDir
args = [
jar.archivePath,
".",
jar.archiveName,
"-cp",
cp
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都有任何想法,为什么干净的规则不起作用?
[编辑]
这是完整的(匿名的)文件内容(自初始问题帖以来已更改):
version = '1.0-SNAPSHOT'
group = 'com.company'
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath group: …Run Code Online (Sandbox Code Playgroud) gradle ×2
akka ×1
akka-cluster ×1
amazon-ecs ×1
docker ×1
java ×1
jooq ×1
node.js ×1
npm ×1
python ×1
sql ×1
tsc ×1
typescript ×1