我有一个包含许多依赖项的Gradle项目,其中一个解析如下:
gradle dependencyInsight --configuration compile --dependency javax.activation
:dependencyInsight
javax.activation:activation:1.1 (conflict resolution)
+--- com.sun.mail:mailapi:1.4.4
| \--- compile
\--- com.sun.mail:smtp:1.4.4
\--- compile
javax.activation:activation:1.0.2 -> 1.1
\--- compile
Run Code Online (Sandbox Code Playgroud)
版本1.1必须是传递依赖,因为我明确指定了1.0.2.如何找出这种特定传递依赖的来源?
我是一个完整的ANTLR4新手,所以请原谅我的无知.我遇到了这个演示文稿,其中定义了一个非常简单的算术表达式语法.看起来像:
grammar Expressions;
start : expr ;
expr : left=expr op=('*'|'/') right=expr #opExpr
| left=expr op=('+'|'-') right=expr #opExpr
| atom=INT #atomExpr
;
INT : ('0'..'9')+ ;
WS : [ \t\r\n]+ -> skip ;
Run Code Online (Sandbox Code Playgroud)
这很好,因为它会生成一个非常简单的二叉树,可以使用访问者模式遍历,如幻灯片中所述,例如,这里是访问以下内容的函数expr:
public Integer visitOpExpr(OpExprContext ctx) {
int left = visit(ctx.left);
int right = visit(ctx.right);
String op = ctx.op.getText();
switch (op.charAt(0)) {
case '*': return left * right;
case '/': return left / right;
case '+': return left + right;
case '-': return left …Run Code Online (Sandbox Code Playgroud) 我有一些遗留代码(或者更确切地说是一些我们无法控制但我们必须使用的代码),它们将大量语句写入system.out/err.
与此同时,我们正在使用一个框架,该框架使用围绕log4j的自定义日志记录系统(再次,遗憾的是我们无法控制它).
所以我正在尝试将out和err流重定向到将使用日志记录系统的自定义PrintStream.我正在阅读有关System.setLog()和System.setErr()方法的问题,但问题是我需要编写自己的PrintStream类来包装正在使用的日志系统.那将是一个巨大的麻烦.
有没有一种简单的方法来实现这一目标?
我会对此失去理智.我有一个build.gradle看起来像这样的文件:
apply plugin: 'idea'
task blah{
// do something
}
idea{
// some stuff
dependsOn blah
}
Run Code Online (Sandbox Code Playgroud)
而且我得到了这个:
Could not find method dependsOn() for arguments [task ':blah'] on root project ...
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚正确的语法是什么.有帮助吗?
我正在尝试将Gradle任务添加到我的项目中以运行Karma测试.到目前为止,测试已从命令行手动运行.我发现了一个Gradle JS插件,但似乎没有Karma集成.除了从命令执行它们之外的任何解决方案
我对JPA和Hibernate都很陌生(虽然我正在努力学习!)我正在努力解决一个我似乎无法找到一个简单解决方案的问题,所以现在就是这样.
我有一个看起来像下面这样的实体:
@Entity
@Table(name = "mytable1")
public class EntityOne {
// surrogate key, database generated
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
// business key
@Column(name = "identifier", nullable = false, unique = true)
private String identifier;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
@JoinColumn(name = "twoId", nullable = false)
private EntityTwo two;
@OneToMany(mappedBy = "entityOne", fetch = FetchType.EAGER,
cascade = {CascadeType.ALL}, orphanRemoval = true)
private Set<EntityThree> resources = new HashSet<>();
// getters/setters omitted
@Override
public int hashCode() …Run Code Online (Sandbox Code Playgroud) 我有一个命令行应用程序,它使用由以下ExecutorService创建的java组成的Spring管理的bean :
ExecutorService service = Executors.newFixedThreadPool(4);
Run Code Online (Sandbox Code Playgroud)
现在,我希望我的服务在我的应用程序关闭时关闭,所以我让我的bean实现了DisposableBean接口并且有一个destroy方法,例如:
public void destroy(){
service.shutdown();
}
Run Code Online (Sandbox Code Playgroud)
然后我可能想做一些事情,比如在Spring上下文中注册一个关闭钩子.然而,我发现(艰难的方式,即在预生产版本中)这不起作用:在调用ExecutorService.shutdown()方法之前不会调用shutdown钩子,导致经典的catch 22问题(它会被调用中断,即,如果我在应用程序运行时按Ctrl-C).这逃过了我的单元测试,因为出于某种原因,它似乎在JUnit中工作正常,这仍然令我感到困惑:JUnit的做法有何不同?
到目前为止我找到的解决方案是ApplicationContext.close()在退出main函数之前显式调用.我想知道是否有更好的解决方案,以及有什么是Spring管理的灵活线程池的最佳实践.如果我的bean 不是由Spring直接管理但是由Spring管理的bean创建的呢?我应该将调用级联到destroy()吗?这不是很容易出错吗?
我感谢任何评论,建议,进一步阅读,RTFM,魔术食谱.
谢谢!
我有一个由几个子项目组成的Gradle项目.我刚刚创建了一个新的,以添加对我想要运行的交互式Groovy shell的支持:
gradle console
Run Code Online (Sandbox Code Playgroud)
要么
gradle console:run
Run Code Online (Sandbox Code Playgroud)
所以我的新console模块的build.gradle文件如下:
apply plugin: 'groovy'
apply plugin:'application'
mainClassName = 'org.codehaus.groovy.tools.shell.Main'
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.2.2'
compile 'org.fusesource.jansi:jansi:1.11'
compile 'commons-cli:commons-cli:1.2'
compile 'jline:jline:2.11'
compile project(':my-module')
}
task(console, dependsOn: 'classes', type: JavaExec) {
main = 'org.codehaus.groovy.tools.shell.Main'
classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)
但是,当我跑步gradle :console:run或者gradle console得到类似的东西时:
:console:run
Groovy Shell (2.2.2, JVM: 1.6.0_45)
Type 'help' or '\h' for help.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000>
BUILD SUCCESSFUL
Total time: 4.529 secs
giovanni@mylaptop:~/Projects/my-project$
Run Code Online (Sandbox Code Playgroud)
因此,交互式shell似乎已经开始,但它会立即退出.
难道我做错了什么?
编辑:在build.gradle文件中添加以下内容:
run.standardInput = System.in
Run Code Online (Sandbox Code Playgroud)
现在,从输入流中读取标准输入(由于注释). …
最好的努力1PC在这篇文章中很好地描述.为SpringSource工作的作者David Syer提供了一个ChainedTransactionManager扩展Spring AbstractPlatformTransactionManager类的实现.
此特定事务管理器可以启动n个事务,例如JDBC或JMS会话,并使用每个资源一个的n个实例执行提交/回滚AbstractPlatformTransactionManager.这在XA驱动程序不可用时非常有用.由于帖子很老,代码在Spring 2.5中运行良好,但在Spring 3+中失败了.
在Spring 3+中有一个实现类似功能的请求票.我愿意试一试,但我想我先问:那里有没有实施?
谢谢
我最近开始为一个项目编写一个通用的对象映射器,并遇到了一些我不太了解的东西.鉴于以下内容:
public class G<X> {
public G(Class<X> c) { }
public void m(X x) { }
public static <T> G<T> create(Class<T> c) {
return new G<T>(c);
}
public static void main(String[] args) {
Object o = ""; // irrelevant!
G<?> t = create(o.getClass());
t.m(o);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译错误:
m(capture#402 of ?) in G<capture#402 of ?> cannot be applied to (java.lang.Object)
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到一种正确的方法t来进行编译.我错过了什么?使用JDK 1.6.
编辑:
这不是一个学术问题.我正在尝试将一个映射器从hibernate对象编写到相应的DTO,以便在REST层中传递.假设对于每个ORM对象Foo,可能存在一个FooDTO具有构造函数的类,该构造函数将实例Foo作为参数.映射Foo到的泛型类FooDTO将封装此假设并抛出适当的异常(如果FooDTO不存在或没有正确的构造函数): …