我试图运行exec-maven-plugin的exec:java一个简单的两模块项目的目标,其中一个模块依赖于其他.到目前为止,我找不到有效的配置.这是一个简化的测试用例:
这是父母pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mkscrg.sandbox</groupId>
<artifactId>exec-multi-module-test</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
module1的pom:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>exec-multi-module-test</artifactId>
<groupId>com.mkscrg.sandbox</groupId>
<version>1.0</version>
</parent>
<artifactId>module1</artifactId>
</project>
Run Code Online (Sandbox Code Playgroud)
module2的pom:http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<parent>
<artifactId>exec-multi-module-test</artifactId>
<groupId>com.mkscrg.sandbox</groupId>
<version>1.0</version>
</parent>
<artifactId>module2</artifactId> …Run Code Online (Sandbox Code Playgroud) 假设你有一个方法
它看起来像这样:
<N extends Number & Comparable<N>, S extends N> S ensureLessThan(N threshold, S input) {
if (input.compareTo(threshold) >= 0) {
throw new IllegalArgumentException("Input " + input + " is not less than " + threshold);
}
return input;
}
Run Code Online (Sandbox Code Playgroud)
运行时,此方法抛出NoSuchMethodError:
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.Number.compareTo(Ljava/lang/Object;)I
Run Code Online (Sandbox Code Playgroud)
添加看起来像冗余演员的东西使它工作:
...
if (((N) input).compareTo(threshold) >= 0) {
...
Run Code Online (Sandbox Code Playgroud)
那么这里发生了什么?
更新:我的Java版本是
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed …Run Code Online (Sandbox Code Playgroud) 在一些地方(这里和这里)已经说过,Python强调"请求宽恕而不是许可"(EAFP)应该通过以下观点来缓和,即异常只应在真正特殊情况下调用.考虑以下内容,我们将弹出并推送优先级队列,直到只剩下一个元素:
import heapq
...
pq = a_list[:]
heapq.heapify(pq)
while True:
min1 = heapq.heappop(pq)
try:
min2 = heapq.heappop(pq)
except IndexError:
break
else
heapq.heappush(pq, min1 + min2)
# do something with min1
Run Code Online (Sandbox Code Playgroud)
异常仅在len(a_list)循环的迭代中引发一次,但它并不是特别的,因为我们知道它最终会发生.这个设置使我们a_list无需检查是否空了很多次,但(可能)它比使用显式条件更不易读.
对这种非特殊程序逻辑使用异常的共识是什么?
免责声明:最近在haskell-cafe列表上询问了这个问题.我向任何被双重打扰的人道歉.
所有iteratee-实现包,我知道的(例如iteratee,iterIO和conduit)定义一个enumeratee组合物功能,除了enumerator包.在我看来,这似乎是一个严重的限制,但它实现起来似乎相对简单:
import Data.Enumerator
import Data.Enumerator.Internal
(=$=) :: Monad m
=> Enumeratee a0 a1 m (Step a2 m b) -> Enumeratee a1 a2 m b
-> Enumeratee a0 a2 m b
(=$=) e01 e12 step = Iteratee $ do
step' <- runIteratee $ e12 step
runIteratee . joinI $ e01 step'
Run Code Online (Sandbox Code Playgroud)
这里有一些我想念的东西吗?或者其他一些enumerator不定义枚举组成的原因?
Python设计理念的一个想法是"应该有一个......明显的方法来实现它".(PEP 20),但这并非总是如此.我特别指的是(简单)if语句与布尔评估.考虑以下:
if words:
self.words = words
else:
self.words = {}
Run Code Online (Sandbox Code Playgroud)
与
self.words = words or {}
Run Code Online (Sandbox Code Playgroud)
在这样一个简单的情况下,从风格上说,这是更可取的吗?对于更复杂的情况,可以选择if语句以获得可读性,对吧?
我正在尝试在Sinatra中使用重定向和会话来传递网站上的一些数据.这是一个简化的例子,使用PrettyPrint进行调试:
require 'pp'
require 'rubygems'
require 'sinatra'
enable :sessions
get '/' do
session[:foo] = '12345'
puts 'session1'
pp session
redirect to('/redir')
end
get '/redir' do
puts 'session2'
pp session
'hello world'
end
Run Code Online (Sandbox Code Playgroud)
看看Thin的输出,我看到:
>> Listening on 0.0.0.0:4567, CTRL+C to stop
session1
{"session_id"=>
"ea587d8afdcb2ada64f9b17cdd1fbae7b192dee5dfc2999ff9d323f1528f6a0f",
"foo"=>"12345"}
127.0.0.1 - - [19/Jul/2011 10:33:24] "GET / HTTP/1.1" 302 - 0.0042
session2
{}
127.0.0.1 - - [19/Jul/2011 10:33:24] "GET /redir HTTP/1.1" 200 11 0.0004
Run Code Online (Sandbox Code Playgroud)
我在文档中看到的一切都表明这应该可以正常工作.实际上,/redir即使我直接请求会话数据,我也永远不会得到任何会话数据,并且会话会在后续请求中保持不变/.
思考?
所以我有一个简单的静态网站,我定期更新.(这是一个用Jekyll构建的博客.)问题是浏览器*似乎正在缓存页面并隐藏返回查看器的更新.
一个显而易见的选择是做一些像这样的地方更新主要发生在着陆页.除了我不一定反对缓存; 我只是想确保服务器上的新版本取代缓存版本.关于如何实现这一点的想法?
*我只在Chrome上直接观察到这一点,但我想其他浏览器存在同样的问题.
是否可以在编译时使用像ASM这样的字节码操作库?
具体来说,我想使用Java的注释处理API在带注释的类上实现样板重的方法.实现注释处理器很简单,但运行时似乎.class文件尚不存在Processor.还有另外一种方法吗?
Go 不会在不同包的测试文件之间共享代码,因此测试接口的定义不会自动重用。在实践中我们如何解决这个问题?
testing/quick:foo/foo.go:
package foo
type Thing int
const (
X Thing = iota
Y
Z
)
Run Code Online (Sandbox Code Playgroud)
bar/bar.go:
package bar
import (
"foo"
)
type Box struct {
Thing foo.Thing
}
Run Code Online (Sandbox Code Playgroud)
我们想要测试属性foo,所以我们testing/quick.Generate定义Thing:
foo_test.go:
package foo
import (
"math/rand"
"reflect"
"testing"
"testing/quick"
"time"
)
func (_ Thing) Generate(r *rand.Rand, sz int) reflect.Value {
return reflect.ValueOf(Thing(r.Intn(3)))
}
func TestGenThing(t *testing.T) {
r := rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
for i := 0; i < …Run Code Online (Sandbox Code Playgroud) java ×3
python ×2
browser ×1
bytecode ×1
caching ×1
coding-style ×1
compilation ×1
enumerator ×1
exception ×1
generics ×1
go ×1
haskell ×1
html ×1
if-statement ×1
maven ×1
polymorphism ×1
quickcheck ×1
redirect ×1
ruby ×1
session ×1
sinatra ×1
testing ×1
thin ×1