在多個目標上運行./pants idea
時,生成的IntelliJ項目允許我引用目標實際上不依賴的代碼。當運行帶有多個目標的./pants理念時,爲什麼IntelliJ不尊重我的依賴關係?
下面是
./pants idea examples/tests/java/com/pants/examples/hello/greet:: \
examples/tests/java/com/pants/examples/useproto::
在Greeting.java,我添加上Hello項目,實際上並不取決於一些依賴褲子爲例:
public static String greet(String greetee) {
// These two lines added to illustrate question
Distance proto = Distance.getDefaultInstance();
System.out.println("Proto: " + proto.toString());
return "Hello, " + greetee + "!";
}
但GreetingTest
項目在IntelliJ下運行良好!
當我嘗試從命令行運行GreetingTest時,它失敗。
$ ./pants test examples/tests/java/com/pants/examples/hello/greet
INFO] Detected git repository at /Users/zundel/Src/pants on branch master
11:24:20 00:00 [main]
(To run a reporting server: ./pants server)
11:24:20 00:00 [bootstrap]
11:24:20 00:00 [setup]
11:24:20 00:00 [parse]
Executing tasks in goals: bootstrap -> imports -> unpack-jars -> deferred-sources -> gen -> resolve -> compile -> resources -> test
11:24:20 00:00 [bootstrap]
11:24:20 00:00 [bootstrap-jvm-tools]
11:24:20 00:00 [imports]
11:24:20 00:00 [ivy-imports]
11:24:20 00:00 [unpack-jars]
11:24:20 00:00 [unpack-jars]
11:24:20 00:00 [deferred-sources]
11:24:20 00:00 [deferred-sources]
11:24:20 00:00 [gen]
11:24:20 00:00 [thrift]
11:24:20 00:00 [protoc]
11:24:20 00:00 [antlr]
11:24:20 00:00 [ragel]
11:24:20 00:00 [jaxb]
11:24:21 00:01 [wire]
11:24:21 00:01 [aapt]
11:24:21 00:01 [scrooge]
11:24:21 00:01 [resolve]
11:24:21 00:01 [ivy]
Invalidated 2 targets.
11:24:21 00:01 [ivy-resolve]
11:24:21 00:01 [compile]
11:24:21 00:01 [compile]
11:24:21 00:01 [jvm]
11:24:21 00:01 [jvm-compilers]
11:24:21 00:01 [find-deleted-sources]
Invalidated 2 targets.
11:24:21 00:01 [partition-analysis]
Compiling 2 java sources in 2 targets (partition 1 of 1).
11:24:21 00:01 [compile]
11:24:21 00:01 [jmake]
Jmake version 1.3.8-10
Opening project database... Done.
Recompiling source files:
/Users/zundel/Src/pants/examples/src/java/com/pants/examples/hello/greet/Greeting.java
/Users/zundel/Src/pants/examples/src/java/com/pants/examples/hello/greet/Greeting.java:6: error: package com.pants.examples.distance.Distances does not exist
import com.pants.examples.distance.Distances.Distance;
^
/Users/zundel/Src/pants/examples/src/java/com/pants/examples/hello/greet/Greeting.java:37: error: cannot find symbol
symbol: class Distance
location: class com.pants.examples.hello.greet.Greeting
Distance proto = Distance.getDefaultInstance();
^
/Users/zundel/Src/pants/examples/src/java/com/pants/examples/hello/greet/Greeting.java:37: error: cannot find symbol
symbol: variable Distance
location: class com.pants.examples.hello.greet.Greeting
Distance proto = Distance.getDefaultInstance();
^
Reading existing dependency file at /Users/zundel/Src/pants/.pants.d/compile/jvm/java/jmake-depfiles/global_depfile
Writing class dependency file to /Users/zundel/Src/pants/.pants.d/compile/jvm/java/jmake-depfiles/global_depfile
Writing project database... Done.
FAILURE: compilation error
Waiting for background workers to finish.
FAILURE
謝謝約翰。我注意到在爲IntelliJ使用Pants Support插件時,它會爲每個目標創建單獨的模塊,以強制Pants BUILD文件中聲明的依賴關係。 – ericzundel 2015-04-03 20:20:41