在过去的某个阶段,我有一个"foo.txt",它在Mercurial源代码控制之下.但它现在已被删除.
当我不知道文件被删除的最后一个Mercurial修订版时,如何恢复该文件?
有没有人设法配置findbugs Maven 3.x插件来生成xml和html报告?(我想要一个用于Jenkins的xml和一个用于在提交之前进行检查的html)
我见过很多文档设置此功能在网络上,但大部分似乎是Maven的2.x的,这是我知道的配置差异(烦人2.x的配置默默3.X忽略) .我是Maven的新手,所以我不确定我是做错了什么还是我遵循旧的指示.
我的pom包含以下内容:
</build>
</plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.3.3</version>
<configuration>
<!-- findbugs:help -Ddetail=true for outputDirectory:
Location where generated html will be created.
-->
<outputDirectory>${project.build.directory}/findbugs</outputDirectory>
<xmlOutput>true</xmlOutput>
<findbugsXmlWithMessages>true</findbugsXmlWithMessages>
<xmlOutputDirectory>target/findbugs</xmlOutputDirectory>
<failOnError>false</failOnError>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud) 我有一个包含许多HTML文件的项目.作为我的Maven构建过程的一部分,我想在这些文件中运行验证器以确保:
任何人都可以推荐一个能做到这一点的好验证器吗?
我在解决如何创建一个可以在具有特定注释参数的bean上运行的切入点时遇到了一些麻烦.我最终的目标是在处理参数之前验证参数的值,但目前我只需要创建切入点.
请考虑以下注释
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.PARAMETER })
public @interface MyAnnotation {}
Run Code Online (Sandbox Code Playgroud)
然后,我想将其应用于以下方法:
public void method1(@MyAnnotation long i) {}
public void method2(String someThing, @MyAnnotation long i) {}
public void method3(String someThing, @MyAnnotation long i, byte value) {}
Run Code Online (Sandbox Code Playgroud)
所以
我的切入点实现需要有以下几点:
@Before(value = "* *(..) && args(verifyMe)")
public void verifyInvestigationId(long verifyMe) {}
Run Code Online (Sandbox Code Playgroud)
我对这个@Before值究竟是什么以及如何将注释及其类型联系起来感到有些困惑.在这一点上,可能不值得列出我尝试过的东西!
更新:基于我在http://stackoverflow.com/questions/3565718/pointcut-matching-methods-with-annotated-parameters/3567170#3567170中看到的建议(纠正了一些误解并增加了我忽略的空间) )我已经到了以下工作的地步:
@Before("execution(public * *(.., @full.path.to.MyAnnotation (*), ..))")
public void beforeMethod(JoinPoint joinPoint) {
System.out.println("At least one of the parameters are annotated with @MyAnnotation"); …Run Code Online (Sandbox Code Playgroud) 我遇到的情况是,我的应用程序可能处于多种“模式”中的一种。由于这些是离散值,我想使用枚举类型对它们进行建模。
对于每种状态,我的应用程序都需要执行稍微不同的功能,我想使用插件模式对其进行建模。我定义了一个接口并提供了一些实现。
我现在希望我的枚举返回适合其状态的插件。我想做以下事情:
public enum Mode {
ONE {
@Override
public MyType get() { return factory.getFirst(); }
},
TWO {
@Override
public MyType get() { return factory.getSecond(); }
};
@Autowired private MyTypeFactory factory;
public abstract MyType get();
// Other methods removed for clarity
}
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。这是因为我使用 spring 注入将插件工厂添加到枚举中(枚举常量是静态的,spring 注入的变量是实例变量,所以我会收到编译错误)
我无法直接从枚举创建 MyType 实例,因为它们需要依赖项注入
我该如何解决这个问题?
背景:我的大部分 Java 项目都有很多样板配置,我最终将这些配置写入我的 POM。(例如 sourceEncoding 总是 UTF-8,组织细节永远不会改变)。为了避免复制粘贴配置块,我创建了自己的标准“父”POM,我可以为我的每个项目扩展。
我也有许多在我从事的每个 Java 项目中使用的工具(例如 checkstyle、PMD 等),因此我已将每个工具的插件添加到我的标准父 pom 中。
PMD(和其他一些工具)有一个有趣的问题——它们需要一组配置文件才能正确运行。由于 Maven 更喜欢使用“每个模块一个可部署资源”的概念,因此我创建了以下(简化的)结构:
<My Template>
|--- Config Files
\--- Parent Pom
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好....
要求: “父 Pom”和“配置文件”总是一起构建和部署 - 即“父 Pom”版本 1.2.3 只能与“配置文件”版本 1.2.3 一起使用,所以当我在“父 POM”我需要执行以下操作:
<dependency>
<groupId>org.my-org</groupId>
<artifactId>config-files</artifactId>
<version>${project.version}</version>
<type>zip</type>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
问题:当我开始我的应用程序(假设版本 0.0.1)时,我使用“Parent Pom”作为我的父母。Maven 将计算项目的有效 POM,${project.version} 将被解释为 0.0.1(应用程序版本)而不是 1.2.3(父 POM 版本)。Maven 然后无法找到配置文件。
问题:我如何告诉 Maven “给我 …
我想用两个简单的方法创建一个类 - 第一个注册需要处理的类型。第二个将处理所有已注册的类型。我遇到的问题是我想注册/处理的类有一定的限制——它们必须是实现和接口的枚举
我不太清楚如何定义将用于存储注册类型的集合。我的代码的简化版本是:
public class Example {
interface MyType {
// Add methods here
}
private List<what-goes-here?> store = new ArrayList<>();
public <T extends Enum<?> & MyType> void registerType(@Nonnull Class<T> type) {
store.add(type);
}
public void processAll() {
for (T t : store) { // Where do I define T?
// process t
}
}
}
Run Code Online (Sandbox Code Playgroud) 我已经编写了一个依赖于Guava 20.0版(与JDK 1.7兼容的最新版本)的库。
然后,我编写了一个使用该库以及uk.org.lidalia:slf4j-test:1.2.0(具有测试范围)的应用程序。slf4j-test依赖于Guava版本14.0.1。
我的问题是我的应用程序将Guava的两个不同版本视为传递依赖项,并选择了较旧的版本。现在,当我在库中调用某些方法时,出现“类或方法未找到”异常。
我可以(并且已经)将Guava排除为slf4j-test的依赖项,从而暂时解决了该问题,但是如果我引入另一个使用Guava的依赖项,则该问题将返回。
所以我的问题是:为什么Maven会选择较旧版本的依赖项,以及如何始终使它选择最新版本。
以下Bash脚本失败:
DATA=fred
echo ${DATA:1:1}
Run Code Online (Sandbox Code Playgroud)
我希望它打印"r",但我得到的只是一个"坏替换"错误.
是否需要使用某种开关来启用变量扩展语法?
干杯