servlet和JAX-RS依赖关系来自哪里?

时间:2016-11-08 14:50:17

标签: java maven servlets java-ee jax-rs

如果我在我的应用程序中包含以下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.0javax.ws.rs:javax.ws.rs-api:2.0依赖于optionaljavax: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)
        }

    }
}

(这是所有基本的东西;我不知道为什么我感到困惑。我必须遗漏一些明显的东西。)

2 个答案:

答案 0 :(得分:1)

由于JAX-RS 2.0Java 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.0provided将作为javaee-api包含在范围内。这意味着, ONLY 在编译类时,将使用这些jar文件,并在运行时使用 NOT 。由于范围是provided,因此预计这两个jar将由运行时环境提供。要重新迭代,当任何jar包含在作为provided的作用域时,这意味着该jar应该用于编译,但是对于运行时,它期望由运行时容器提供。

现在回答你的问题,如果考虑任何运行时环境容器,例如JBOSSWAS等,它们都会捆绑在这些jar中。因此,在编译类时,它将使用作为javaee-api的传递依赖项的jar,但在运行时它将使用与容器捆绑在一起的jar。因此,您不会收到任何错误。