修复:这是maven-compiler-plugin 3.1中的已知错误
我正在将一个基于ant的1000多个java源项目的构建转换为maven.到目前为止mvn compile一切都很好,但每次启动它都会重新编译所有内容(而不是重用旧类)
使用mvn -X compile报告
[DEBUG] Stale source detected: /project_path/src/main/java/package_path/AFile1.java
[DEBUG] Stale source detected: /project_path/src/main/java/package_path/AFile2.java
...
Run Code Online (Sandbox Code Playgroud)
(仅适用于某个包中的文件,可能与其余代码未引用;不是我的来源,我只是试图对构建进行编组)
编译不会失败,并且正在生成具有更新时间戳的类
/project_path/target/classes/package_path/AFile1.class
/project_path/target/classes/package_path/AFile2.class
...
Run Code Online (Sandbox Code Playgroud)
但是,在查看时间戳时,自昨天以来,java文件没有更改,并且类文件是最新的.为什么这些来源被确定为陈旧?我该如何调试此问题?
即使没有发生任何变化,也必须重新编译1k +文件...
样本输出:
$ mvn clean compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MyProject 1.9.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for net.sourceforge:jffmpeg:jar:1.1.0 is missing, no dependency information available
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ my-project ---
[INFO] Deleting /project_path/target
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ my-project …Run Code Online (Sandbox Code Playgroud) 该问题给出了所有必要的数据:在给定区间[0,N-1]内生成一系列K个非重复整数的有效算法是什么.平凡算法(产生随机数,并把它们添加到序列,看着他们,看看他们是否已经在那里之前)是非常昂贵的,如果ķ大且足够接近ñ.
在从链表中有效地选择一组随机元素中提供的算法似乎比必要的更复杂,并且需要一些实现.我刚刚发现了另一种似乎可以完成工作的算法,只要您知道所有相关参数,只需一次通过即可.
我有一段代码,我想测量它的时间效率.由于从代码本身估计这种复杂性很难,我想把它放在循环中并对结果计时.一旦收集到足够的数据点(大小 - >时间),我就能看出哪条曲线最合适.
利用给定大小的随机输入数据多次重复操作可以消除由于OS决定在不良时刻进行多任务而导致的波动,从而产生更精确的时间.增加问题的大小可以提供更多的点,理想情况下间距很大.
我的测试代码工作正常(初始,非定时预热循环减少加载时间;然后,从10的大小开始,以10%的增量扩展到1000000,重复运行直到5s有已完成或已完成5次完整运行).但是,我通过猜测得到了这些数字.
是否有一种可接受的"科学"方法来扩展重复和问题大小,以实现更快,更准确的时间尺寸图?是否有代码(或库)可以支撑所有无聊的位,并且我应该在滚动自己之前知道它?特别是,我可以认为,当发现时间上的颠簸时,可以采取更多措施 - 而相对平稳的读数可以简单地被认为是"足够好".
编辑
我知道计算大O复杂度的经典方法.它适用于具有良好代表性操作(例如,"比较"或"交换")的自包含算法.当不满足这些条件时,它不像宣传的那样工作(例如:LLVM的编译时C++模板实例化成本,这是一个庞大而复杂的,我不知道相关的代表操作是什么).这就是为什么我将它视为一个黑盒子,并试图从外部测量时间而不是代码检查.
我试图在一个内部实现位置敏感的缩放JScrollPane.它JScrollPane包含一个定制的组件,paint它将在分配的任何空间内绘制自己 - 因此缩放就像使用MouseWheelListener根据需要调整内部组件大小一样容易.
但我也希望放大(或退出)一个点,使得该点尽可能在生成的放大(或 - )视图中保持中心(这就是我所说的'位置敏感'缩放),类似如何在谷歌地图中缩放工作.我确信之前已经做了很多次 - 有没有人知道在Java Swing下做"权利"的方式?玩Graphic2D转换而不是使用会更好JScrollPanes吗?
示例代码如下:
package test;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
public class FPanel extends javax.swing.JPanel {
private Dimension preferredSize = new Dimension(400, 400);
private Rectangle2D[] rects = new Rectangle2D[50];
public static void main(String[] args) {
JFrame jf = new JFrame("test");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(400, 400);
jf.add(new JScrollPane(new FPanel()));
jf.setVisible(true);
}
public FPanel() {
// generate rectangles with pseudo-random coords
for …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来检测或缓解C++源代码,当预处理时,它扩展为巨大的大小,以便GCC耗尽内存.
示例代码:
#include <iostream>
using namespace std;
int main() {
#define A30 cout << "hello world";
#define A29 if (1) { A30 } else { A30 }
#define A28 if (0) { A29 } else { A29 }
// ... you get the idea ...
#define A1 if (1) { A2 } else { A2 }
#define A0 if (0) { A1 } else { A1 }
A0
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译这个程序应该生成一个巨大的,语法正确的if-else树(适用于较小的版本;比如说,直到A10); 如果执行,它可以轻松打印该树中的2 ^ 30个"hello world"字符串之一.但是,尝试在8GB计算机上进行编译会导致无响应的行为,并且(稍后)会显示以下错误:
internal compiler error: Segmentation …Run Code Online (Sandbox Code Playgroud) 我用grails 3.1.16
的build.gradle:
dependencies {
compile "com.google.guava:guava:18.0"
compile "org.grails.plugins:spring-security-rest:2.0.0.M2"
}
Run Code Online (Sandbox Code Playgroud)
在运行此代码时:
private LoadingCache<String, Boolean> attempts
@PostConstruct
void init() {
Integer time = ApplicationContextHolder.getProperty(ApplicationContextHolder.config.time)
attempts = CacheBuilder.newBuilder()
.expireAfterWrite(time, TimeUnit.MINUTES)
.build({ 0 } as CacheLoader)
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Caused by: java.lang.NoSuchMethodError: com.google.common.base.Platform.systemNanoTime()J
at com.google.common.base.LocalCache(Ticker.java:60)
at com.google.common.cache.LocalCache$Segment.put(LocalCache.java:2827)
at com.google.common.cache.LocalCache.put(LocalCache.java:4149)
at com.google.common.cache.LocalCache$LocalManualCache.put(LocalCache.java:4754)
at com.google.common.cache.Cache$put.call(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
在运行依赖项报告之后,我发现问题是由Spring Security REST插件的依赖引起的:(com.google.guava:guava-base:r03) - 使用相同的包名"com.google.common. base"和Platform.class没有这样的方法systemNanoTime()
| +--- org.grails.plugins:spring-security-rest:2.0.0.M2
| | +--- com.google.guava:guava-io:r03
| | | +--- com.google.guava:guava-annotations:r03
| | | \--- com.google.guava:guava-base:r03
| | | \--- com.google.guava:guava-annotations:r03
Run Code Online (Sandbox Code Playgroud)
任何解决这个问题的想法?
我对Java听不到的事情感到有点困惑.
但我知道它会做GUI事件.
我错过了什么吗?java有事件处理机制吗?
我知道我可以实现发布者订阅者模式,但我正在寻找Java中的本机支持.
我似乎记得Java 5或6中有关Java添加事件的内容,但我不记得我在哪里听到这个并且我可能正在编写它.
基本上我将设备包装在java类中,设备会抛出事件,而我正在寻找最合理的方式来揭示它.我来自.Net背景,我正在寻找像.Net(C#)中的事件
任何帮助,将不胜感激.
鉴于凸多边形,我试图在保持其直径的同时增长其形状(如"最大区域").直径定义为可放置在多边形内的最长段的长度.由于多边形是凸的,我假设通过扫描所有顶点对总能找到这个直径.
例如,给定等边三角形作为输入多边形,三角形的直径是任何边的长度; 平滑这将导致3个圆段,如图所示
对于任意凸多边形,一种非常低效的算法是计算以每个多边形顶点为中心的最大直径半径圆的交点; 这就是我目前使用的(Java).有更好的吗?任何伪代码或指向算法的指针都将受到赞赏.
另一个例子:压扁的五边形及其相应的直径保持最大形状.这个想法是你不能在不增加直径的情况下增加这种形状的面积(也就是说,可以在比原始直径更长的形状范围内画出一条直线).在这种特殊情况下,似乎半径= polygon_diameter/2(粉红色)的单个圆优于半径= polygon_diameter(浅蓝色)的多个较大圆的交点.第二个图像叠加两个区域以使比较更容易,但区域应完全包围多边形.

我有一个依赖于库 X 的实用程序类 U,并且必须放入一个包中,该包将在具有 X 可用的程序(它应该执行其正常操作)和没有 X 的地方(它不应该执行任何操作)中使用。在不将类分成两部分的情况下,我找到了一个简单的模式来解决这个问题:
package foo;
import bar.MisteriousX;
public class U {
static private boolean isXPresent = false;
static {
try {
isXPresent = (null != U.class.getClassLoader().loadClass("bar.MisteriousX"));
} catch (Exception e) {
// loading of a sample X class failed: no X for you
}
}
public static void doSomething() {
if (isXPresent) {
new Runnable() {
public void run() {
System.err.println("X says " + MisteriousX.say());
}
}.run();
} else {
System.err.println("X is not there");
} …Run Code Online (Sandbox Code Playgroud)