小编dur*_*597的帖子

如何在保留SLF4J的同时从库的依赖项中删除logback?

在我的Vaadin项目中,我依赖于某个库.该库使用slf4j进行日志记录.在库pom中,logback slf4j绑定被添加为运行时依赖项.

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
        <scope>runtime</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我直接使用log4j进行日志记录.我希望库添加的日志进入我的log4j日志.

为此,我在我的pom中添加了以下内容,包括slf4j log4j绑定

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.12</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

然而,slf4j抱怨它发现了多个绑定.

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/program_files/apache-tomcat-8.0.24/temp/0-ROOT/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/program_files/apache-tomcat-8.0.24/temp/0-ROOT/WEB-INF/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Run Code Online (Sandbox Code Playgroud)

我检查了我的应用程序的依赖树,它依赖于logback.(以下是对logback的唯一依赖)

[INFO] |  +- com.mycompany.mylib:libname:jar:1.1.0-SNAPSHOT:compile
[INFO] |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.5:runtime
[INFO] |  |  +- ch.qos.logback:logback-classic:jar:1.0.13:runtime
[INFO] |  |  |  \- ch.qos.logback:logback-core:jar:1.0.13:runtime
[INFO] |  |  +- ch.qos.logback:logback-access:jar:1.0.13:runtime
Run Code Online (Sandbox Code Playgroud)

此外,当我WEB-INF\lib在我的war文件中检查内部目录时,我发现了以下jar.

logback-access-1.0.13.jar
logback-classic-1.0.13.jar
logback-core-1.0.13.jar
Run Code Online (Sandbox Code Playgroud)

为什么logback最终出现在我的lib目录中?正如我所听到的,运行时依赖项不应该进入libs目录.

我该如何解决这个问题?该库是在我公司内部开发的,如果需要,我可以要求库开发人员删除logback运行时依赖项.

java logging dependencies slf4j maven

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

为什么以下代码崩溃javac?可以做些什么呢?

我正在阅读这篇关于"Java中的奇怪事物"的文章,我遇到了一个有趣的概念:不可判定的类型.

考虑以下三个类/接口:

public interface Type<T> { }
Run Code Online (Sandbox Code Playgroud)
public class D<P> implements Type<Type<? super D<D<P>>>> { }
Run Code Online (Sandbox Code Playgroud)
public class WildcardTest {
  Type<? super D<Byte>> d = new D<Byte>();
}
Run Code Online (Sandbox Code Playgroud)

显然问题是它是否D是不可判定的Type<? super D<Byte>>; 谁能进一步解释这个?

javac 1.8.0_60StackOverflowError尝试编译时抛出很长时间WildcardTest:

The system is out of resources.
Consult the following stack trace for details.
java.lang.StackOverflowError
        at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:4640)
        at com.sun.tools.javac.code.Types$26.visitClassType(Types.java:3834)
        at com.sun.tools.javac.code.Types$26.visitClassType(Types.java:3826)
        at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:778)
        at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:4640)
        at com.sun.tools.javac.code.Types$26.visitClassType(Types.java:3839)
        at com.sun.tools.javac.code.Types$26.visitClassType(Types.java:3826)
        at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:778)
        at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:4640)
        at com.sun.tools.javac.code.Types$26.visitClassType(Types.java:3839)
        at …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow generics types compilation

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

为什么我得到"类必须有一个(并且只有一个)构造函数"错误?

我一直试图让Guice工作但最终得到这个:

类必须具有一个(且只有一个)构造函数

我的界面:

public interface AddrBookStore {
    public Contact getContactByKey(String key);
    public void addContact(Contact c);
}
Run Code Online (Sandbox Code Playgroud)

实施:

public class RdbmsBasedAddrBookStore implements AddrBookStore {
    private Connection connection;

    public RdbmsBasedAddrBookStore(Connection connection) {
        this.connection = connection;
    }

    @Override
    public Contact getContactByKey(String key) throws AddrBookException
    {} 
    @Override
    public void addContact(Contact c) throws AddrBookException
    {}
}
Run Code Online (Sandbox Code Playgroud)

绑定模块:

public class ABguiceConfingModule extends AbstractModule {
    @Override
    protected void configure() {        
        bind(AddrBookStore.class).to(RdbmsBasedAddrBookStore.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

AddrBook我注射的客户:

public class AddrBook {
    private AddrBookStore store;

    @Inject
    public AddrBook(AddrBookStore store)
    { …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection guice

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

在Windows上有相同的Make吗?

我在Windows上开发,我想使用beanstalkd.它仅作为tarball提供,我只是想知道是否有一些方法可以像在Linux中一样轻松地构建它?我找到了一些用于Windows的gnu make端口,但它们似乎没有工作.源代码分发是否特定于Linux?

当我尝试使用mingw32-make时,它说"没有什么可以为文件做".TBH我不知道该怎么运行它,所以我尝试了tarball,目录,以及Makefile.in和Makefile.am.他们都说同样的话.

compiler-construction makefile build

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

如何使用订户选项?

我现在开始使用Pubsubhubbub(以及所有关于实时的东西),但我在使用Subscriber选项时遇到了麻烦.

我正在尝试用PHP开发一个webapp来:

  1. 订阅RSS(以前发布)到Hub(http://pubsubhubbub.appspot.com/);
  2. 从Hub读取订阅的通知(更新); 没有成功!:(

我验证在PHP中存在一个库到订阅服务器(在Git中),但使用这个库不能使订阅工作(得到409错误!).

我怎样才能做到这一点?

php real-time subscriber websub

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

寻找Java代码美化(或者可能没有美化,但是让代码更优雅的东西)

我不知道如何描述它,但我正在寻找一种工具,可以为我的代码提供关于如何...更优雅的建议.

例如,使嵌套的if()语句成为switch语句.这样的事情.由于我不知道如何描述我的问题,我不知道该搜索什么.我的东西代码美化不要专门改变陈述吧?

java code-formatting

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

我可以使用GPL许可我的Matlab代码吗?

基本上就是这样.我在Matlab中有一些代码,我想发布它,所以任何人都可以使用它.另外我想防止代码在我之后关闭.

:我可以选择GPL进行许可吗?如果没有,我的选择是什么?(除了停止使用Matlab,我已经在考虑)


编辑

我只是编辑它,因为这对我的情况更准确.很抱歉给您带来不便.

:建议使用GPL发布我的Matlab代码以使其在社区中发展吗?如果没有,你会选择什么?

matlab licensing gpl

11
推荐指数
0
解决办法
4218
查看次数

有一种方法可以使用CLASS_EXISTS和__autoload而无需CRASH脚本吗?

例:

ClassName.php

<?php echo "This will crash all"; ?>
Run Code Online (Sandbox Code Playgroud)

在另一个档案中......

foreach ($FILENAMES_WITHOUT_DOT_PHP as $name => $value) {
    if (class_exists( $value )) {
      echo "ClassName exists...";
    }
    else {
      echo "ClassName doesn't exists....";
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码的输出是: 这会崩溃所有

而不是这样: ClassName不存在....

自动加载功能:

function __autoload( $var_class )
{
     require_once( "$var_class.php") ;
}
Run Code Online (Sandbox Code Playgroud)

php exec autoload

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

在开发/维护Web应用程序时,我应该使用哪种分支策略?

我正在尝试为Web应用程序项目确定最佳分支策略.以下是我到目前为止所提出的建议,我将非常感谢任何评论和经验.

我看到它的方式有两个主要的分支策略:"按版本分支"和"按功能分支".

"按发布分支":开发发生在主干上.当发布时间临近时,将为该发行版创建一个分支.然后稳定/测试该分支,最后进行释放.在发布之后,分支被合并回主干,同时保持发布分支活动以进行错误修复.是否应用了错误修复,然后将其合并到主干中(如果主干上的开发没有以其他方式使错误重叠).新功能将添加到主干中,不会影响发布分支.当新的发布时间临近时,将创建一个新的发布分支aso

"按功能分支":主干始终是"生产"主干(现场代码).错误修正直接提交到主干.下一版本的功能是在功能分支中开发的.Bugfixes会不时合并到功能分支中.当发布时间到来时,功能分支将合并到主干中,并且生命周期将继续.

现在,我认为这两种策略之间的实际区别在于,"发布"允许您维护软件的不同生产版本(当客户A具有版本1和客户B版本1.5时,客户端是此处的付费客户案件).相比之下,使用"按功能"策略,您只能支持当前的生产版本(所有客户端都使用最新版本).

由于在典型的Web应用程序中,所有客户端都使用相同的"最新"版本(因为它们都访问相同的服务器),我认为"按功能"方法是最常用的.它消除了合并"跨层次结构"的需要,比如说必须将bug修复应用于所有3个版本.

所以我目前的状态是我应该选择"逐个分支".如果重要,我的团队不是很熟练.

svn version-control branch web-applications branching-strategy

11
推荐指数
2
解决办法
2834
查看次数

以编程方式确定是否用"a"或"an"描述对象?

我有一个名词数据库(ex"house","感叹号","苹果"),我需要在我的应用程序中输出和描述.很难用一个自然的句子来描述一个项目而不使用"a"或"an" - "房子很大","感叹号很小"等等.

我可以在PHP中使用任何函数,库或hack来确定用A或AN描述任何给定名词是否更合适?

php grammar

11
推荐指数
3
解决办法
2694
查看次数