这应该很简单.
问题
如何在一个项目中获得切入点以建议另一个项目中的代码/类?
目前,我正在调试这两个项目之间的交互.为了帮助解决这个问题,我正在编写一个Aspect(在科学项目中)来记录关键信息,因为数学代码(和科学代码)会执行.
package org.science.example;
public aspect ScientificLog {
public pointcut testCut() : execution (public * *.*(..));
before() : testCut() {
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
org.math.example
横切的课程,全部!proect properties > AspectJ Build > Inpath
并点击添加项目并选择数学项目.这没用,但似乎我需要按照这些方式做点什么.
在此先感谢您的任何建议...
-gMale
Caused by: org.aspectj.weaver.BCException: Unable to continue, this version of AspectJ supports classes built with weaver version 6.0 …
我不明白为什么当我们声明它时,我们不需要为gradle任务的名称添加引号:
task hello (type : DefaultTask) {
}
Run Code Online (Sandbox Code Playgroud)
我试过一个时髦的项目,发现它是非法的,gradle是如何工作的.而且我不理解上面的表达式,为什么我们可以添加(type : DefaultTask)
,我们如何用groovy语法分析它?
使用java.util.regex提取子字符串,我发现自己实现了相同的代码模式,以解决对的调用:
Pattern p = Pattern.compile(pattern); // can be static final
Matcher m = p.matcher(input);
if (m.find()) { // or m.matches()
foo(m.group(x));
} else {
...
}
Run Code Online (Sandbox Code Playgroud)
是否有功能扩展或流行的库(番石榴/ apache通用),避免了不必要的,容易出错的局部变量,例如:
Pattern p = Pattern.compile(pattern); // can be static final
p.matchedGroup(input, x) // return Optional<String>
.map(group -> foo(group))
.orElse(...);
Run Code Online (Sandbox Code Playgroud)
以及一系列匹配结果,例如:
Pattern p = Pattern.compile(pattern);
p.findMatches(input)
.map((MatchResult mr) -> {
mr.groupsIfPresent(x).map(g -> foo(g)).orElse(...)
})
.findFirst();
Run Code Online (Sandbox Code Playgroud)
似乎Java8中唯一的功能性添加是,.splitAsStream()
但是仅在尝试拆分匹配项时才有用。
当我在 Gradle 中运行测试时,我想传递一些属性:
./gradlew test -DmyProperty=someValue
Run Code Online (Sandbox Code Playgroud)
所以在我的 Spock 测试中,我将用来检索值:
def value = System.getProperty("myProperty")
Run Code Online (Sandbox Code Playgroud)
我正在使用 kotlin gradle dsl。当我尝试使用本文档中的“tasks.test”时:https ://docs.gradle.org/current/userguide/java_testing.html#test_filtering
我的build.gradle.kts
文件中无法识别“测试” 。
我假设我需要使用与下面帖子中的答案类似的东西,但尚不清楚在使用 gradle kotlin DSL 时应该如何完成。
这并不完全像标题所说的那样,但接近。考虑这些 Spring bean:
@Bean
class BeanA {
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = EvilException.class)
public void methodA() {
/* ... some actions */
if (condition) {
throw new EvilException();
}
}
}
@Bean
class BeanB {
@Autowired private BeanA beanA;
final int MAX_TRIES = 3;
@Transactional(propagation = Propagation.NESTED)
public void methodB() {
// prepare to call Bean A
try {
beanA.methodA();
/* maybe do some more things */
}
catch (EvilException e) {
/* recover from evil */
}
}
} …
Run Code Online (Sandbox Code Playgroud) 摇篮6.1.1
我一直在尝试使用 Kotlin DSL 转换项目的 gradle 文件,但到目前为止失败了。我的所有项目都是用 Java 进行的多项目构建。我在这里遵循插件子项目示例
看起来像这样:
plugins {
idea
eclipse
}
subprojects {
apply(plugin = "java")
dependencies {
implementation("com.google.guava:guava:28.1-jre")
//...
}
}
Run Code Online (Sandbox Code Playgroud)
java插件似乎在子项目中不被理解,并且所有“实现”行都得到了未解析的引用。
我有一堆 PNG 图像文件。我正在尝试使用 ffmpeg 制作幻灯片。图片尺寸为3000*4000。这些图像的长宽比并不完全相同。
有些是这样的:
有些是这样的:
我使用了命令:
ffmpeg -loop 1 -framerate 1/10 -i img%3d.png -i audio.wav -vf scale=w=3840:h=-1 -vcodec libx264 -crf 14 -r 60 -pix_fmt yuv420p -shortest output.mp4
Run Code Online (Sandbox Code Playgroud)
它返回给我这个:
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18) 20170516
configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-mips32r2 --disable-mips32r6 --disable-mips64r6 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-msa --disable-libopencv --disable-podpages --disable-stripping --enable-avfilter --enable-avresample --enable-gcrypt --enable-gnutls --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb …
Run Code Online (Sandbox Code Playgroud) 有没有办法在Spring AOP中获取被拦截方法的调用者(MVC更具体)?我有两个方法说“callerM1()”和“callerM2()”,它们调用了一个被拦截的方法“method()”。然后我有一个这样的方面:
@Before("execution(* *.method(..)) && args(arg1)")
public Object doSomething(...){
//find out which one and do something
}
Run Code Online (Sandbox Code Playgroud)
如何仅使用 Spring AOP 功能来了解“callerM1()”或“callerM2()”中的哪一个调用了“method()”?在这里我也可以使用 around 建议,但我想这是一个不同的问题。我检查了各种可能性,包括 EnclosureStaticPart 和更改切入点定义但没有成功。
一个快速的解决方案是使用 StackTraceElement,但我认为这不是一个好的解决方案。
在Eclipse Oxygen with CDT中我可以为大多数文件类型配置拼写检查
Preferences > General > Editors > Text Editors > Spelling
Run Code Online (Sandbox Code Playgroud)
但是对于显然在"结构化文本编辑器"中打开的XML文件,我找不到这样的选项.
这是隐藏在某个地方还是由一个好的插件覆盖?
更新
该用户指南中提到的拼写检查为"结构化文本编辑器",但是,这并不符合实际的用户界面; 既不存在"窗口>首选项>拼写检查",也没有"编辑>拼写检查":
我尝试将wiremock设置为在随机端口上运行https:
@Rule
public WireMockRule wireMockServer = new WireMockRule(
WireMockConfiguration.wireMockConfig().dynamicPort().dynamicHttpsPort()
);
Run Code Online (Sandbox Code Playgroud)
但是当我使用这个并打电话时,wireMockServer.httpsPort()
我得到了异常:
java.lang.IllegalStateException: Not listening on HTTPS port. Either HTTPS is not enabled or the WireMock server is stopped.
at com.google.common.base.Preconditions.checkState(Preconditions.java:150)
at com.github.tomakehurst.wiremock.WireMockServer.httpsPort(WireMockServer.java:184)
Run Code Online (Sandbox Code Playgroud)
如何设置 WireMock 使用 https?
注意:我使用的是 2.14.0 版本