小编Gio*_*tta的帖子

Gradle:如何显示依赖冲突发生的位置

我有一个包含许多依赖项的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.如何找出这种特定传递依赖的来源?

dependencies conflict gradle

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

ANTLR4访问者模式简单的算术例子

我是一个完整的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)

java antlr lexer antlr4

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

重定向System.out和System.err

我有一些遗留代码(或者更确切地说是一些我们无法控制但我们必须使用的代码),它们将大量语句写入system.out/err.

与此同时,我们正在使用一个框架,该框架使用围绕log4j的自定义日志记录系统(再次,遗憾的是我们无法控制它).

所以我正在尝试将out和err流重定向到将使用日志记录系统的自定义PrintStream.我正在阅读有关System.setLog()System.setErr()方法的问题,但问题是我需要编写自己的PrintStream类来包装正在使用的日志系统.那将是一个巨大的麻烦.

有没有一种简单的方法来实现这一目标?

java logging log4j

13
推荐指数
3
解决办法
2万
查看次数

将任务依赖性添加到现有Gradle任务

我会对此失去理智.我有一个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)

我无法弄清楚正确的语法是什么.有帮助吗?

java groovy intellij-idea gradle

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

如何从Gradle运行JS Karma测试

我正在尝试将Gradle任务添加到我的项目中以运行Karma测试.到目前为止,测试已从命令行手动运行.我发现了一个Gradle JS插件,但似乎没有Karma集成.除了从命令执行它们之外的任何解决方案

javascript gradle karma-runner

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

Hibernate:懒惰初始化与破坏的hashcode/equals难题

我对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)

java hibernate jpa hashcode lazy-initialization

10
推荐指数
2
解决办法
4621
查看次数

如何使用Spring正确关闭执行程序服务?

我有一个命令行应用程序,它使用由以下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,魔术食谱.

谢谢!

java junit spring multithreading executorservice

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

Gradle:使用项目类路径执行Groovy交互式shell

我有一个由几个子项目组成的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)

现在,从输入流中读取标准输入(由于注释). …

java shell groovy gradle

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

根据"尽力而为1PC"模式实现Spring ChainedTransactionManager

最好的努力1PC在这篇文章中很好地描述.为SpringSource工作的作者David Syer提供了一个ChainedTransactionManager扩展Spring AbstractPlatformTransactionManager类的实现.

此特定事务管理器可以启动n个事务,例如JDBC或JMS会话,并使用每个资源一个的n个实例执行提交/回滚AbstractPlatformTransactionManager.这在XA驱动程序不可用时非常有用.由于帖子很老,代码在Spring 2.5中运行良好,但在Spring 3+中失败了.

在Spring 3+中有一个实现类似功能的请求票.我愿意试一试,但我想我先问:那里有没有实施?

谢谢

java spring transactions jms jdbc

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

Java泛型益智游戏与通用静态工厂

我最近开始为一个项目编写一个通用的对象映射器,并遇到了一些我不太了解的东西.鉴于以下内容:

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不存在或没有正确的构造函数): …

java generics

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