题
是否可以使Log4J显示其用于配置的文件的完整路径?
我和log4j有一种爱恨交织的关系.在好的时候,它很棒但是当它不起作用时,它可能是最难调试的东西之一.我管理应用程序中的所有日志记录.因此,我非常熟悉日志和手册中定义的默认初始化过程. 尽管如此,似乎每隔几周记录一次,我花了很多时间来解决问题.
这次,它严重受损.每个地方的每个日志语句都被转储到控制台,我无法弄清楚原因.上周使用我的log4j.xml文件的完全相同的代码库突然使用了一些其他配置.没有任何明显的变化.我唯一的猜测是,一些依赖已经改变,我怀疑Maven下载了一些破坏一切的邪恶JAR.
如果我能弄清楚Log4J决定在启动时使用哪个配置文件,我可以轻松解决这个问题和其他大多数问题.
有没有办法告诉Log4J打印它用于配置的文件?或者,有没有办法打破正在运行的应用程序并使用调试器来回答这个问题(可能使用表达式或通过检查变量)?
对于一个bash大师来说,这将是一个非常简单的免费赠品:
题
使用bash,如何从目录中的所有文件中创建类路径?
细节
给定一个目录:
LIB=/path/to/project/dir/lib
Run Code Online (Sandbox Code Playgroud)
它只包含*.jar文件,例如:
junit-4.8.1.jar
jurt-3.2.1.jar
log4j-1.2.16.jar
mockito-all-1.8.5.jar
Run Code Online (Sandbox Code Playgroud)
我需要在表单中创建一个冒号分隔的classpath变量:
CLASSPATH=/path/to/project/dir/lib/junit-4.8.1.jar:/path/to/project/dir/lib/jurt-3.2.1.jar:/path/to/project/dir/lib/log4j-1.2.16.jar:/path/to/project/dir/lib/mockito-all-1.8.5.jar
Run Code Online (Sandbox Code Playgroud)
一些几乎表达我正在寻找的逻辑的seudo代码将遵循:
for( each file in directory ) {
classpath = classpath + ":" + LIB + file.name
}
Run Code Online (Sandbox Code Playgroud)
通过bash脚本实现此目的的简单方法是什么?
好的.我厌倦了这个问题.这必须有一个简单的解决方案,我很确定!我希望SO可以帮助我彻底摆脱这一切!
题
我们如何让Eclipse停止尝试处理/编译特定项目目录下的所有文件?目标是在问题视图中没有错误/警告,如果它们与此文件夹或其子文件夹中的某些内容相关.
背景
我们运行Eclipse 3.6,m2eclipse插件v0.10.2.20100623管理我们的autobuild.由于我无法控制的原因,我们在SVN项目目录下有完整的BlazeDS发行版src/main/resources/blazeds
.从本质上讲,这个目录包含一个运行blazeds的tomilla的vanilla发行版,当我们通过SCP部署到我们的服务器时,我们将添加所有配置和项目文件.
因此,当我们运行deploy时,这个版本的tomcat被复制到服务器,我们的项目被放在里面.Tomcat和我们的RIA应用程序工作,一切都很好.
问题是,Eclipse src/main/resources/blazeds
在运行AutoBuild时尝试编译所有内容,这会在我们的问题视图中生成大约300个错误/警告.因此,当真实的错误出现时,它会在噪声中丢失.
这些错误代码从茎中/blazeds/tomcat/webapps/samples/testdrive-datapush
,也是testdrive-httpservice
,traderdesktop
例如web应用.它们具有不在类路径上的依赖源代码和未包含在库中的jar.
尝试失败的解决方案
我正在尝试推动正确的解决方案:完全移除样品,并从我们的版本控制中获取blazeds.这不会很快发生.
我在这里遵循了SO的答案,但这只是一个非常临时的解决方案.我已经尝试过在我能想到的任何地方添加排除项目,我的团队的其他成员也做了同样的事情.我已删除src/main/resources
作为源目录(在首选项> Java构建路径>源选项卡中)我已blazeds
在资源目录下添加了排除项.我试过的每一个排列blazeds
,并**
作为*blazeds*
,**/blazeds/**
等等.
我甚至尝试过包含编译器抱怨的库和源文件,但是如果不过度修改我们的项目配置,我就无法做到正确.
摘要
这必须简单.排除在eclipse项目中产生警告/错误的文件夹的常规方法是什么?
更新#1:
下面的gedim解决方案是不错的但它
1)不清除项目中的红色X
2)是我们团队中的每个人都需要手动改变
(即,它不在项目属性文件中;因此,它没有检查到subversion)
我希望通过告诉Eclipse该目录不包含
要编译/验证的项目来解决核心问题.这样的更改可能会出现在其中一个项目设置文件中.
下图显示了我想要清除的红色X,这
Build Path > Exclude
不是一个选项......
鉴于Eclipse中的"运行配置",我想打印出用于运行它的相关shell命令.
例如:现在,在Eclipse中,如果我点击"播放",它将运行:
mvn assembly:directory -Dmaven.test.skip=true
我没有看到那个命令,我只知道IDE必须在某些时候运行.但是,其他一些运行配置对于长类路径和虚拟机选项来说要复杂得多,坦率地说,有时我不知道等效的shell命令是什么(特别是涉及到Flex时).
必须有一些方法来访问与Eclipse/Flex Builder中的"运行配置"相关联的shell命令.这些信息必须可用,这让我相信有人写了一个插件来显示它.或者可能已经在Eclipse中内置了一个用于访问它的选项.
那么有没有办法将Eclipse运行配置转换为shell命令?
(仅限上下文:我问,因为我正在编写一个bash脚本,可以在开发期间自动完成我所做的一切 - 从运行数据库一直到打开Firefox并在运行Web应用程序之前清除缓存.所以每个命令我从IDE运行需要存在于脚本中.有些很难搞清楚.)
是否可以一次启动多个活动?我的意思是,从主要创建3个活动按某种顺序,只是最后一个将是可见的?到目前为止,我只能创建一个活动.
谢谢
在Kotlin中,我想将扩展方法添加到类中,例如添加到类中Entity
.但我只想Entity
在交易中看到这些扩展,否则隐藏.例如,如果我定义这些类和扩展:
interface Entity {}
fun Entity.save() {}
fun Entity.delete() {}
class Transaction {
fun start() {}
fun commit() {}
fun rollback() {}
}
Run Code Online (Sandbox Code Playgroud)
我现在可以叫意外save()
,并delete()
在任何时候,但我只希望他们可以在后start()
一交易后不再commit()
或rollback()
?目前我可以这样做,这是错误的:
someEntity.save() // DO NOT WANT TO ALLOW HERE
val tx = Transaction()
tx.start()
someEntity.save() // YES, ALLOW
tx.commit()
someEntity.delete() // DO NOT WANT TO ALLOW HERE
Run Code Online (Sandbox Code Playgroud)
如何使它们在正确的上下文中显示和消失?
注意: 这个问题是由作者故意编写和回答的(自答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.还要澄清为Kotlin的alphas写的一些非常古老的答案,这些答案对于当前的Kotlin来说是不准确的.其他答案也欢迎,有很多样式如何回答这个问题!
几个星期以来,我一直在与maven搏斗,让它"正确"部署我们的项目.
我差不多完成但是我有一个顽固的小问题:
当我使用带有"目录"目标的maven程序集插件时
mvn assembly:directory
我得到了很多控制台输出,如下所示:
[INFO] tomcat/conf already added, skipping
[INFO] tomcat/conf/Catalina already added, skipping
[INFO] tomcat/conf/Catalina/localhost already added, skipping
[INFO] tomcat/webapps already added, skipping
我编写了自己的汇编描述符,它基本上将多个FileSets复制到我们的deploy目录中的各个子目录中.只要将一个FileSet中的文件复制到另一个FileSet已经创建了基本目录结构的位置(以及一些可以覆盖的"默认"文件),就会出现上述消息.
所以,我很难搞清楚:
我如何1)抑制这些消息(但只有"已经添加"消息)或2)允许覆盖?
我想做的事情相当容易.或者你会想.但是,没有什么工作正常.
要求: 使用maven,使用AspectJ编译器编译Java 1.6项目.
注意: 我们的代码无法使用javac进行编译.也就是说,如果未编入方面,则编译失败(因为我们有方面可以软化异常).
<failOnError>false</failOnError>
到编译器插件(感谢
Pascal Thivent)<phase>process-sources</phase>
到aspectj编译器插件(感谢Andrew Swan)有关这些解决方案的更多信息,请参阅答案部分.我认为解决方案#2是更好的方法.
问题(基于以下失败的尝试):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerId>aspectj</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-aspectj</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这失败并出现错误:
org.codehaus.plexus.compiler.CompilerException: The source version was not recognized: 1.6
无论我使用的是什么版本的plexus编译器(1.8,1.6,1.3等),这都行不通.我实际上阅读了源代码,发现这个编译器不喜欢Java 1.5以上的源代码.
尝试2(失败): 使用附加到编译和测试编译目标的aspectJ-maven-plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal> …
Run Code Online (Sandbox Code Playgroud) 题
当我运行所有JUnit测试时,使用eclipse,我可以设置默认超时吗?
背景
我的经理坚持编写单元测试,有时需要5分钟才能完成.当我尝试运行我们的整个测试套件(仅约300次测试)时,可能需要30多分钟.我想放置一些可以阻止任何超过10秒的测试的东西.
我知道个别测试可以注释:
@Test(timeout=10000)
Run Code Online (Sandbox Code Playgroud)
但这样做会使他的长期测试总是失败.我希望他们在他的盒子上运行时工作(如果我必须在检查之前对项目进行微调,那是可以接受的.但是,从40个不同的测试文件中删除超时是不切实际的).
我也知道我可以创建一个ant任务来为所有测试设置默认超时,类似于:
<junit timeout="10000">
...
</junit>
Run Code Online (Sandbox Code Playgroud)
问题是我们通常使用右键单击>运行方式> JUnit测试从Eclipse中运行测试.
摘要
那么是否有一种相对无痛的方法为所有测试设置超时,可能使用运行配置设置,项目设置,或JUnit首选项,或环境变量,或什么?我甚至决定安装一些其他插件,让我右键单击特定的测试文件夹,并以其他方式运行所有测试,如通过蚂蚁或其他东西......