小编Rol*_* W.的帖子

在同一模块中使用时,IntelliJ无法找到生成的源

我正在使用谷歌AutoFactory的注释处理器.我注释SomeClass@AutoFactory和引用的new SomeClassFactory().create()是同一个模块在其他地方.

Maven配置:

我在Maven中添加了必要的依赖:

    <dependency>
        <groupId>com.google.auto.factory</groupId>
        <artifactId>auto-factory</artifactId>
        <version>1.0-beta2</version>
        <optional>true</optional>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

运行时,$ mvn clean compile我看到它target/generated-sources/annotions/somepackage/SomeClassFactory已创建,模块编译没有错误.

IntelliJ配置:

  • Reimport all maven modules
  • Preferences- > Annotation Processors- >Enable annotation processing
  • Rebuild Project

v14.1.4如果我的理解是正确的,那么在我的IDEA()版本中这应该足够了.

编译器首选项 项目结构

我还执行了以下步骤:

  • 已验证该generated-sources文件夹已添加为源Project Structure
  • 已验证Maven首选项Generated sources folders已设置为Detect automatically
  • 验证源是在重建时实际生成的(target首先删除文件夹以确保它是由IntelliJ生成的)
  • 尝试Exclude output paths按照@tilpner的建议在项目结构中禁用
  • 使缓存无效并重新启动
  • 删除.idea文件夹和.iml文件
  • 尝试Phase to be used for …

java intellij-idea maven autofactory

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

如何使用Jackson的ContextualDeserializer作为根值?

我正在尝试为从某个抽象类扩展或实现某个接口的所有类实现通用反序列化器.在这个例子中,我使用的是界面StringConvertible.我需要确定具体类型,以便我可以创建一个实例.

程序员布鲁斯的一篇旧论坛帖子让我使用了ContextDeserializer,当StringConvertible是另一个类中的属性时它正在工作.

但是当我想直接反序列化StringConvertible时,我无法找到获取具体类型的方法,因为beanProperty参数是null.根据Jackson JSON用户组的这个问题/回答,显然这是预期的: The only case where property should be null is when serializing a "root value", meaning the object instance passed directly to ObjectMapper's (or ObjectWriter's) writeValue() method -- in this case there simply isn't a referring property. But otherwise it should always be passed.

有关两种情况的示例,请参阅下面的主要方法:

@JsonDeserialize(using = StringConvertibleDeserializer.class)
public final class SomeStringConvertible implements StringConvertible {

    private final String value;

    public SomeStringConvertible(final String value) {

        this.value = …
Run Code Online (Sandbox Code Playgroud)

java serialization json jackson

10
推荐指数
1
解决办法
3619
查看次数

如何测试AtomicBoolean原子性?

我正在为AtomicInteger和AtomicBoolean编写单元测试.它们将用作参考测试,用于在objective-c中测试这些类的仿真,以用于翻译项目.

我认为AtomicInteger测试很好,主要是通过在大量for循环中执行可预测数量的递增,递减,加法和减法操作,每个循环都在自己的线程中运行(每个操作类型有很多线程).实际操作使用CountDownLatch同时启动.

当所有线程完成后,我通过比较原子整数和预期的整数值来断言,基于线程数,每个线程的迭代次数和每次迭代的预期增加/减少.这个测试通过.

但是如何测试AtomicBoolean?基本操作是get和set,因此在许多线程中多次调用并期望最终结果为true或false似乎没有意义.我正在考虑的方向是使用两个应始终具有相反值的AtomicBooleans.像这样:

@Test
public void testAtomicity() throws Exception {

    // ====  SETUP  ====
    final AtomicBoolean booleanA = new AtomicBoolean(true);
    final AtomicBoolean booleanB = new AtomicBoolean(false);

    final int threadCount = 50;

    final int iterationsPerThread = 5000;

    final CountDownLatch startSignalLatch = new CountDownLatch(1);
    final CountDownLatch threadsFinishedLatch = new CountDownLatch(threadCount);

    final AtomicBoolean assertFailed = new AtomicBoolean(false);

    // ====  EXECUTE: start all threads ====
    for (int i = 0; i < threadCount; i++) {

        // ====  Create the thread  =====
        AtomicOperationsThread …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading unit-testing

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

Javac 不运行注释处理器

问题

我正在重新审视一个我至少一年没有碰过的 Maven 项目。我很确定当我离开它时它已经成功编译(目录中仍然有一个工作 jar target),但现在编译失败,因为生成的类丢失了。

我尝试过的

  • 已验证确实没有来源target/generated-sources/annotations不存在
  • 确保 javac 未被调用-proc:none它不是
  • 运行mvn clean dependency:unpack-dependencies -Dmdep.useSubDirectoryPerArtifact=true以确保预期的依赖项位于类路径上并且它们包含有效的META-INF/services/javax.annotation.processing.Processor条目(是的,有多个,包括org.immutables.processor.ProxyProcessor
  • 按照如何确保 javac 正在使用注释处理器并在未使用注释处理器时进行故障排除中的以下步骤进行操作:
    1. 从 Maven 调试日志中获取 javac 选项
    2. 删除-nowarn选项并添加-verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose. 注意:我还必须添加主类的相对路径,否则 javac 会抱怨没有源。
    3. 验证处理器类是否已加载(不存在
    4. 查找至少一个处理轮日志(不存在
    5. 确保注释存在于循环日志列表中(无循环日志
  • -proc:only向 javac 命令添加了选项
  • 还添加-processor org.immutables.processor.ProxyProcessor到 javac 命令(处理器现已加载,但仍然没有打印轮次,也没有生成类)
  • 更改了处理器选项以-processor org.immutables.processor.ProxyProcessorXXX查看是否会产生影响(确实如此 …

java code-generation javac maven

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

进度条 + ETA 与 pv 命令在同一行

介绍

pv在管道中使用命令来显示进度条。我用一个简单的计数器试了一下:

for (( i = 1 ; i <= 100 ; i++ )); do sleep 1; echo $i; done | pv --progress --line-mode --size 100 --eta --timer
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我希望进度条显示在同一行。这个答案解释了如何做到这一点。

所以我试过这个:

for (( i = 1 ; i <= 100 ; i++ )); do sleep 1; echo $i; done | >&2 echo -en "\r"; pv --progress --line-mode --size 100 --eta --timer
Run Code Online (Sandbox Code Playgroud)

它保持在一行,但现在不再更新 ETA。

我怎样才能让 ETA 也更新?

更新

现在 iBug回答了上一节中的问题,我意识到我还有一个相关的要求:stdout需要保留以便可以在下一个管道中使用。在我的特定情况下,我需要将结果写入文件(即> …

linux macos bash shell pv

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