如果我在我的应用程序中包含以下J2EE依赖项,我可以访问servlet和JAX-RS类和接口:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
但他们来自哪里?在Maven Central上,我看到javax:javaee-api:7.0
具有依赖关系javax:javaee-web-api:7.0
,而依赖关系javax.servlet:javax.servlet-api:3.1.0
和javax.ws.rs:javax.ws.rs-api:2.0
依赖于optional
和javax:javaee-api:7.0
,所以从表面上看,{&3;}是答案。
但所有这些依赖项都标记为 [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ temp-server ---
[INFO] com.example:test-server:war:1.0.0-SNAPSHOT
[INFO] +- com.google.code.findbugs:jsr305:jar:3.0.1:provided
[INFO] \- javax:javaee-api:jar:7.0:compile
[INFO] \- com.sun.mail:javax.mail:jar:1.5.0:compile
[INFO] \- javax.activation:activation:jar:1.1:compile
,这意味着作为传递依赖项,除非我明确包含它们,否则它们不会显示给我的项目。但是我的程序编译只是依赖于import tensorflow as tf
import numpy as np
session = tf.InteractiveSession()
n = 4 # Number of dimensions of matrix
# Get pairs of indices of positions
indices = list(zip(*np.tril_indices(n)))
indices = tf.constant([list(i) for i in indices], dtype=tf.int64)
# Test values to load into matrix
test = tf.constant(np.random.normal(0, 1, int(n*(n+1)/2)), dtype=tf.float64)
# Can pass in list of values and indices to tf.sparse_to_dense
# and it will return a dense matrix
dense = tf.sparse_to_dense(sparse_indices=indices, output_shape=[n, n], \
sparse_values=test, default_value=0, \
validate_indices=True)
sess.close()
。为什么呢?
这是我的依赖树;我不知道他们进来的地方:
class ApiService {
static var swiftyJsonVar:JSON?
class func getExerciseData() {
Alamofire.request("https://wger.de/api/v2/exercise/?format=json").responseJSON { (responseData) -> Void in
if((responseData.result.value) != nil) {
swiftyJsonVar = JSON(responseData.result.value!)
print(swiftyJsonVar ?? nil)
}
}
}
(这是所有基本的东西;我不知道为什么我感到困惑。我必须遗漏一些明显的东西。)
答案 0 :(得分:1)
由于JAX-RS 2.0
是Java EE 7
的一部分,定义其API的类直接包含在工件javax:javaee-api:7.0
中,因此只要您使用标准类就足以编译您的程序
答案 1 :(得分:1)
在这里,您需要了解<scope>provided</scope>
的含义。在包含javax.servlet:javax.servlet-api:3.1.0
依赖项时,javax.ws.rs:javax.ws.rs-api:2.0
和provided
将作为javaee-api
包含在范围内。这意味着, ONLY 在编译类时,将使用这些jar文件,并在运行时使用 NOT 。由于范围是provided
,因此预计这两个jar将由运行时环境提供。要重新迭代,当任何jar包含在作为provided
的作用域时,这意味着该jar应该用于编译,但是对于运行时,它期望由运行时容器提供。
现在回答你的问题,如果考虑任何运行时环境容器,例如JBOSS
,WAS
等,它们都会捆绑在这些jar中。因此,在编译类时,它将使用作为javaee-api
的传递依赖项的jar,但在运行时它将使用与容器捆绑在一起的jar。因此,您不会收到任何错误。