一个python框架,用于在python环境中构建用于处理node.js生态系统的工具链和实用程序。

calmjs的Python项目详细描述


一个python框架,用于构建用于工作的工具链和实用程序 在python环境中使用node.js生态系统。

https://travis-ci.org/calmjs/calmjs.svg?分支=3.4.1https://ci.appveyor.com/api/projects/status/45054tm9cfk7ryam/branch/3.4.1?svg=truehttps://coveralls.io/repos/github/calmjs/calmjs/badge.svg?分支机构=3.4.1

简介

calmjs为 python和python包的运行时 开发人员一个定义良好的接口,用于在 node.js/javascript开发工具和 它们的python包,以便与 python环境中的node.js/javascript环境可以是 提供便利。calmjs框架的目标是帮助 python包的开发、测试和部署 包括和/或与外部javascript代码集成。

方法论

首先,这是通过向python包提供 声明对node.js/javascript包或源文件的依赖关系 必须完成其功能。这个共同的框架 将确保在公共协议下这些元数据的可访问性, 避免不可移植的不兼容声明 不同的项目和环境,或者分散在 不同的工具或位置或在同一工作中重复 由不同的工具集构成的环境。没有共同的框架, 结果是python包将无法正确地 在彼此之间传递它们的非python需求和状态, 在建设、开发和部署 软件堆栈,和/或成为这些进程的错误源。

其次,通过提供一组构建在这个可扩展的 使用这些声明生成 所需node.js工具的配置文件,以便它们可以 为其构建所需的生成和/或运行时环境 功能。

最终,这允许更好地将node.js与给定的python集成 环境,降低实现连续性所需的工作量 python包与 node.js/javascript包,可复制。

实施

为了实现这一点,calmjs框架提供了一组 扩展到帮助跟踪和管理的setuptools 基于javascript或node.js的包(例如 对于给定的python包,通过 npm )。它还提供了一个数字 可以用来构建自定义工具链 实施不同的管理和编译策略 将javascript代码和相关资产放入 应用服务器可以使用或生成测试工具来确保 开发和生产环境下的正确性。 这些额外的功能将由其他python包提供 在 calmjs 名称空间下实现这个模块 建筑。

calmjs这个名字最初源于 工具链的迭代,包括编译,组装, 并使用 宿主python包。标志中的"M"是兔子的耳朵。这个 这个动物被选为这个项目的吉祥物是因为 他们的饮食习惯,就像javascript代码一样 通常由其他工具转换为最低可用级别 框架。

功能概述

< DL>
与基于node.js的包管理器集成的框架

setuptools 命令挂钩, calmjs 提供python 能够声明和管理清单定义的包 基于node.js的包管理系统的文件(例如 package.json 用于 npm )。在典型用法下,这意味着 声明 可以跟踪给定python包所需的javascript包, 都在通过扩展的setuptools框架内 由calmjs提供。

这个基础结构的另一部分是 遵循python包依赖关系图。开发人员和用户 可以使用 calmjs 控制台命令入口点,或通过 setuptools ,生成清单文件以便于 安装python包所需的node.js包 在已完成的应用程序堆栈中,为所有 手头有包裹。

calmjs 包括对 npm 和 默认情况下, 纱线

从具有相同命名空间的python包中导出javascript代码

包含相关javascript源代码的给定python包 在同一python模块和命名空间结构中的代码 python源代码在源树中,将能够声明 这些命名空间作为 通过setuptools条目获得完全相同的python包名称空间 点:

这些声明将通过 其他包的 calmjs 模块注册表系统 通过框架提供的api声明 遵循相同声明的模块和命名空间的javascript代码 结构。默认模块注册表将使用 / 字符(而不是像python中那样的 字符)作为 由于中已建立的命名约定,名称的分隔符 javascript(以及面向未来的es6)。

使用calmjs框架的其他工具可以使用 这些原始javascript源文件与本地 node.js环境,或生成用于在 网状物。这将导致…

更好地将javascript工具链集成到python环境中

这是通过提供构建工具链的框架来实现的 对于node.js/javascript使用javascript编写的工具 与现有python包正确集成的环境 以及环境。

对于如何使用或如何使用 工具或源文件,作为实现保留 细节。有关示例,请参阅//pypi.python.org/pypi/calmjs.rjs" rel="nofollow"> calmjs.rjs python 包,它允许从 嵌入在python包中的javascript包,或者 calmjs.webpack 与 制作另一种常用的捆绑工件格式。

通常,可以构建工具链来查找和加载所有python 具有任何 javascript源文件,以及那些将被提取的文件,通过 适当的开卷机(如果有的话)以建立可部署的 人工产品。可设置测试线束以帮助机组运行 测试、功能测试和自然的最终集成测试 成功部署所需。

定义良好的模块化架构,以确保代码重用和可扩展性

到目前为止所描述的特性是建立在 类和模块,以便支持附加的javascript 处理脱毛的工具或自定义过程可以非常简单 为几个类创建一个新模块 带有相关设置工具入口点的参数。

事实上, calmjs 开箱即用的只有核心 框架加上 npm / 纱的连接部分,带支架 对于工具,如作为完全独立的包的 bower r.js 。 (分别为 calmjs.bower calmjs.rjs ),以便 不需要此功能的项目、环境或站点 这些软件包只需选择不安装即可。

安装

因为calmjs的目标是集成node.js和npm(或yarn)。 在python环境中,它们需要在 环境;如果未安装,请按照安装 适合目标操作的node.js的步骤 系统/环境/平台。

要将calmjs安装到给定的python环境中,请执行以下操作 可以执行命令直接从pypi安装:

$ pip install calmjs

替代安装方法(针对开发人员、高级用户)

对于最新的特性和 错误修复,开发版本可以通过git安装,就像这样:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs

注意,可编辑安装的 -u标志是为了确保 将setuptools升级到最新版本以避免出现问题 处理开发包的名称空间,在 下一段。

或者,可以直接克隆git存储库并执行 python setup.py在源代码的根目录中开发 但是,如果使用 任何早于v31的setuptools版本都将不一致 导入 calmjs 命名空间下的模块时出错。各种各样 命名空间导入失败的症状记录在 本文档的故障排除部分。

测试惯性导航系统计数

为了确保 calmjs 安装正常工作, 内置测试套件可以通过以下方式执行:

$ python -m unittest calmjs.tests.make_suite

如果出现故障,请在问题跟踪程序中使用 完整的回溯和/或安装方法。也请 记住要包含特定于平台的信息,比如python 版本、操作系统环境和版本以及其他相关 与当前问题相关的信息。

主要功能的用法和说明

当安装到特定的python环境中时, calmjs 命令行实用程序将在其中可用。

$ calmjs
usage: calmjs [-h] [-d] [-q] [-v] [-V] <command> ...

positional arguments:
  <command>
    artifact     helpers for the management of artifacts
    npm          npm support for the calmjs framework
    yarn         yarn support for the calmjs framework

optional arguments:
  -h, --help     show this help message and exit

global options:
  -d, --debug    show traceback on error; twice for post_mortem
                 '--debugger' when execution cannot continue
  -q, --quiet    be more quiet
  -v, --verbose  be more verbose
  -V, --version  print version information

如前所述, npm 支持是内置的,因此它始终可用;到 访问其帮助,只需执行 calmjs npm -h ,然后将列出 可用于该特定子命令的选项。如果其他 子命令可用(将由其他 calmjs 集成包)它们将被列为 <;command>; 和 将以相同的方式访问特定的帮助消息。

为给定的python包声明package.json

如果包希望声明对由npm托管的包的依赖关系, 它可以在其 设置中执行类似的操作。py

fromsetuptoolsimportsetuppackage_json={"dependencies":{"jquery":"~3.0.0","underscore":"~1.8.0",}}setup(name='example.package',# ...setup_requires=['calmjs',# plus other setup_requires ...],package_json=package_json,# ...)

注意, 安装程序需要 节必须指定 calmjs ,以便 为生成 package.json python时给定包的元数据文件 setup.py egg_info 被执行(直接或间接),这样即使 如果当前python中尚未安装calmjs 环境,它将从pypi获得并作为 设置工具的设置过程,并且不直接依赖于 给定的包。如果 提供的数据是有效的json字符串或没有 不兼容的数据类型。例如:

$ python setup.py egg_info
running egg_info
writing package_json to example.package.egg-info/package.json
...
$ cat example.package.egg-info/package.json
{
    "dependencies": {
        "jquery": "~3.0.0",
        "underscore": "~1.8.0"
    }
}

使用setup需要的关键原因是不强制给定 包的依赖项将 calmjs 作为其依赖项的一部分,作为 通常这只是开发人员的要求,而不是 最终用户。这也意味着对于想要使用calmjs的开发人员来说 和实用程序它们必须单独安装(即 pip install 或者通过 使用附加标志需要 ,例如:

setup(name='example.package',# ...setup_requires=['calmjs',# ...],extras_require={'dev':['calmjs',# ... plus other development dependencies],},# ...)

然后使用 附件下列出的依赖项:

$ pip install -e .[dev]Obtaining file://example/package
...
Installing collected packages: ..., calmjs, ...
  Running setup.py develop for example.package
Successfully installed ...

注意,现在 calmjs 包仍然安装在python中 环境和它们提供的实用程序现在可以使用,包括 以下部分。

跨python包依赖项使用 package.json

package.json 文件写入包元数据 目录,诸如 calmjs 之类的实用程序可以利用它。一种方法 要做到这一点,需要通过该包的 setup.py 。通过调用 setup.py npm --init 从那里,一个新的 包.json 组合在一起 在 给定包的python包依赖项,将写入 当前目录。这类似于运行npm init 区别在于依赖关系也通过 给定python包的python包依赖树。

请注意,这需要创建和处理 G有能力Iven包(请参阅上一节 必须正确安装所有依赖项 并且可以从当前的python环境中导入。

或者,可以使用 calmjs npm 实用程序。调用calmjs npm --init 示例。来自命令行的package 将实现相同的功能 在文件系统的任何地方,只要 calmjs 示例.package 是通过当前 python环境的导入系统。更多细节和信息 关于此实用程序,请参阅与 npm的集成。 通过calmjs npm 部分:

处理与python包依赖项的依赖项

平的比嵌套的好。所以所有依赖项 任何上游python包声明的devdependencies 由其所有下游包自动继承,但它们具有 通过这个机制用他们想要的任何东西覆盖它的选项 如上所述。他们可以将javascript或node.js包设置为 无论需要什么版本,甚至只是简单地删除依赖项 完全通过将版本设置为

每当calmjs需要一个实际的 包.json 时, calmjs npm 实用程序将展平 python包到一个文件中,然后传递到 各自的javascript包管理器。这个过程是 当a calmjs 工具链或实用程序使用这些 声明信息以生成要实现的所需工件 无论手头有什么需要的任务。

当然,如果包的嵌套样式和依赖项 样式为 npm 是理想的,没有人被迫使用它,它们是免费的 使用任何工具解释或使用任何数据文件 以及可用的依赖项,和/或将其包拆分为python 和javascript位,并在两个pypi上部署和托管它们 (对于 pip )和 npm ,然后找出如何 它们以连贯的方式重新组合在一起。不要问(或和)争论 作者就后一种选择对每个人来说是更好还是更容易 (开发人员、系统集成商和最终用户)参与。

声明节点模块内部路径的显式依赖关系

假设对源于 显式指定了from npm ,构建工具将再次受益于 对这些包中所需文件的显式声明。即, 编译的包可以在 json字符串很像包json,就像这样:

extras_calmjs={'node_modules':{'jquery':'jquery/dist/jquery.js','underscore':'underscore/underscore.js',},}setup(name='example.package',...extras_calmjs=extras_calmjs,...)

由于node_modules 被声明为一个extras_键,因此有冲突 将解析环境中包之间的声明 并以与在中声明的依赖项冲突相同的方式合并 包json

请注意,必须声明完整的路径名(注意 .js 示例中包含文件名后缀;目录可以 也要申报。但是,由于这些声明是从内部完成的 python需要显式的完整路径,因此它一直到下游 正确处理和/或将其转换为 标准node.js工具可能期望的约定(即 .js 省略文件名后缀。

从python包导出javascript代码

在前面的例子中,如果 示例.包的布局如下:

$ pip install calmjs
0

宣布在 /example/package 中编写源文件 通过 calmjs 的javascript模块,入口点可以声明为 所以在 setup.py 文件中:

$ pip install calmjs
1

请注意,入口点的名称不相关;该入口点 名称被忽略,因为默认模块注册表的目的是 提供直接映射到同一导入命名空间的模块名 作为源python模块,但是使用es5名称空间分隔符 / ,而不是python中的 字符。如果 需要映射,可以定义一个新的模块注册表类 使用提供的名称作为来自javascript的commonjs导入名称 代码:

默认方法将公开两个源文件,如下所示 姓名:

$ pip install calmjs
2

对于某些项目,可能不希望允许这种自动化方法 从 给定python模块。

为了解决这个问题,可以声明新的模块注册中心 通过calmjs框架。前提是 模块注册表 子类设置正确,以便从 给定包,只需将其声明为 calmjs.registry 入口点 像这样:

$ pip install calmjs
3

请注意,虽然入口点名称所允许的名称是 不受限制,这些注册表名应该是标准的虚线 命名空间格式,以确保最大程度的工具兼容性 通过使用此系统的工具从命令行指定。

声明注册表后,只需将 calmjs.module 替换为 它的名称,以及一个 calmjs_module_registry 属性 声明此 示例。module registry是要使用的默认注册表 带着这个包裹。

$ pip install calmjs
4

在calmjs框架中,可以显式地将工具指定为 从注册到的任何或所有模块注册中心捕获模块 框架。还定义了另一个登记处。如果入口点是 声明如下:

$ pip install calmjs
5

命名空间和模块的分隔符将使用 字符而不是 / 。但是,如果 字符是 javascript模块的有效名称,使用此名称可能会产生问题 使用某些javascript工具。而基于amd的模块系统可以 通常处理导入中的 字符而不出现问题,允许 在 然而,javascript环境可能会导致与 因此,其他javascript库不使用此命名方案 推荐。

默认情况下,还会声明另一个后缀为 的注册表。 作为对先前引入的注册表的补充 可以使用来声明 已声明的各个模块。例如:

$ pip install calmjs
6

与第一个示例非常相似,它声明 example.package 为 python命名空间模块,用于导出javascript代码,其中 后续声明部分是包含测试的模块 第一个伴奏。

向加载程序提供附带的资源文件

某些node.js构建工具和框架支持 其他资源文件的"加载程序",通过相同的导入/要求 javascript模块的系统。提供最基本的支持 减轻包创建者公开其他资源所需的工作 文件到node.js工具导入系统,一个辅助加载程序 注册表可以与父模块一起声明和使用 注册表。在前面的示例上进行扩展,如果以下入口点 定义:

$ pip install calmjs
7

calmjs.module.loader注册表将引用其父注册表 calmjs.module 对于摆姿势,所以 它将使用声明的文件来获取所有相关的文件名 按名称扩展到特定加载程序的名称。与基本模块不同 注册表,模块加载程序注册表将忽略python模块名 部分,而名称(在左侧)是所需的加载程序, 附加(用逗号分隔的标记括在 [] 之间)是 要从包中获取的文件扩展名。因此 以前为example.package定义的条目如下 如果目标资源文件存在,则require 语句应解析 对于套餐:

$ pip install calmjs
8

因为注册表生成的值遵循标准的工具链 规范编译条目语法,这应该满足最基本的用例 并且可以直接作为calmjs_模块注册表包含 包裹。但是,所提供的javascript代码中的实际用法 与集成/交互的实际工具链包结合 与各自的node.js包可能有以下交互 需要特殊处理(例如包括/排除 为最终工件生成的段,或者这些源如何 是别名还是对系统可用,或者是否 注册表本身需要手动集成);请参阅 与此相关的特定集成包的文档 特定注册表类型。

最后一点注意:由于python入口点系统的限制, 假定文件扩展名都是小写。

npm整合 calmjs-npm整合

如前所述,可以使用 包.json 从setuptools外部生成功能。用户可以很容易地 通过内置的calmjs npm工具进行同样的操作:

$ pip install calmjs
9

当然,上面显示的与 可以使用setuptools 框架,但是包名可以是 提供用于从任何地方生成target package.json 文件 在文件系统上,前提是python环境具有 已安装必需的软件包。例如,如果node.js包 example.package 要安装,可以调用它来查看 将生成的package.json

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
0

如果当前文件中已经存在一个 package.json 文件 使用带有 --init --install的 -i 标志的目录 显示生成的版本与 现有版本,并提示执行操作。

工具链建议

对于需要提供附加说明的包开发人员 工具链执行(例如,为了在RequireJS和 一个给定包的特定功能用例的网页包)。 工具链系统还将使用通知系统,以便 可以创建和注册附加说明以供使用和重用 他们的家属。MUCh与工具链一样,此功能当前 缺少测试用例之外的文档。

通过设置工具生成预定义工件

可以定义要为给定的 包装和规则。只需定义一个返回 calmjs.toolchain.toolchain子类的实例 与所需的工具和一个 calmjs.toolchain.spec 对象集成 有必要的规则。这些特定功能通常由 提供它们的包,请参考工具链包 在上一节中列出并链接以获取有关如何 这些可以使用。

由于这些也是通过注册表系统实现的,所以 点通常如下:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
1

在本例中,来自模块的 builder 函数 example.toolchain 用于生成 complete.bundle.js 文件。生成的工件文件将位于 包元数据目录中的目录 (以 .dist info .egg info 结尾的一个)。 包裹。附带的calmjs_artifacts.json 文件也将是 生成,列出了 涉及到工件的构造,以及二进制文件的版本 用于任务的。

build_calmjs_artifacts 设置为 true 时, 通过 setup.py构建自动生成这些工件 步骤将启用。这对于自动绑定 发布版的工件文件,如python wheels(例如运行 setup.py bdist_wheel 也将生成声明的工件。 否则,可以使用 setup.py build_calmjs_工件 或通过 calmjs工件构建工具。

故障排除

以下是典型的 使用 calmjs

由于严重错误,critical calmjs.runtime终止

如果 calmjs 遇到任何意外情况,它可能会像这样中止:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
2

如果之前没有列出有用的错误消息,请再次尝试运行 使用调试标志(要么 -d 要么 --调试 )。

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
3

两次指定调试标志将启用 事后分析 模式, 调试程序将在故障点被触发。作者 实现运行时类的包,这些运行时类为 calmjs 命令在开发周期中可能会发现这一点非常有用。 请注意,只有在顶级 运行时类启用用法(实现 如果故障发生在 调用运行时类。任何其他错误或异常 在 calmjs 运行时的设置阶段发生 以较低的优先级记录(例如,在 安装阶段可见,必须提供其他详细标志。

错误错误的"calmjs.runtime"入口点

< DL>
重要错误
这通常是由于本地安装的 已注册入口点的包,以及 calmjs 指向错误导入位置的注册入口点, 或当前使用了冲突的安装方法 安装部分概述的环境 文件。用重新安装损坏的软件包 ENVI的正确安装方法环境,或完全卸载 或者删除属于 触发不需要的错误消息。
错误的入口点
这是由定义格式错误的入口点的包引起的。名字 触发此错误的包的 错误可能会报告给开发人员。
尝试从 calmjs 命名空间导入时,

随机 导入错误

由于 calmjs 同时声明为名称空间和包,因此 工作python环境中需要的低级设置 确保内的所有模块都能正确定位。然而, 早于v31.0.0的版本的setuptools不会创建 安装包时所需的包命名空间声明 使用开发安装方法(例如使用python setup.py 在python环境中与其他环境一起开发 通过同一命名空间中的 pip 安装的包。 失败可以表现为任何模块的不一致导入失败 在 calmjs 名称空间下。例如:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
4

它也可能以不同的方式出现,例如 attributeerror 可通过执行 calmjs的unittests来触发:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
5

要解决此问题,请确保将setuptools升级到v31或 更大,可以通过pip安装/升级,就像这样:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
6

然后重新安装calmjs 命名空间以解决此导入问题。

忽略/不传递给底层工具的环境变量

一般来说,calmjs框架过滤掉了所有的环境 默认情况下,除了最小值之外的变量,并且只传递 基础工具的数量有限。这是 路径和 节点路径 变量,加上要启用的平台特定变量 脚本和二进制文件的执行。

在声明的参数上运行时报告"无法识别的参数"

对于calmjs>;=3.1.0,应完全解决此问题。

ArgumentParser中的默认行为默认为无用的责备 子参数导致的任何无法识别参数的根分析器。 calmjs-3.1.0之前的原始解决方案失败如下 下面记录了它的子解析器实现 不完整。任何一种误导行为都会阻碍最终用户 无法快速定位错误的参数标志。

例如,如果执行 calmjs 命令,则 错误消息可能如下:

$# standard installation mode
$ pip install git+https://github.com/calmjs/calmjs.git#egg=calmjs
$# for an editable installation mode; note the upgrade flag
$ pip install -U -e git+https://github.com/calmjs/calmjs.git#egg=calmjs
7

这意味着第二个子命令无法识别 --标志 (即 calmjs subcmd1 subcmd2 命令)放在 subcmd2 ,但subparser for subcmd1 将其标记为错误。 不幸的是,argparse模块中有许多问题 所以很难完全解决这个问题 时间请确保在正确的子命令级别提供标志 (即,在这种情况下, calmjs subcmd1 --标志 项subcmd2 ),否则 通过在每个 有效的子命令。

模块注册表未找到来自namesp的文件ace包

中有许多与命名空间包关联的边缘案例 python,特别是通过 方法(即拉链鸡蛋、轮子和开发包的混合)。 而处理给定的命名空间模块的工作区 提供了软件包,但存在一些限制。一个这样的原因 是因为处理压缩鸡蛋的复杂性;如果这是个问题, 请确保受影响的包已声明为 false,或者生成一个python轮,然后安装该轮, 如果目标python环境将其作为标准安装 格式:

用户警告:未知的分发选项:"package\u json"

这也适用于其他相关选项,因为它是由 执行 setup.py 而不使用 calmjs 设置工具,以便保留这些关键字的处理方法 未定义。这可以通过提供 calmjs 作为 安装程序需要 节。有关这方面的更多信息,请参见 使用包json部分。

贡献

  • 问题跟踪器:https://github.com/calmjs/calmjs/issues rel="nofollow">https://github.com/calmjs/calmjs/issues
  • 源代码:https://github.com/calmjs/calmjs" rel="nofollow">https://github.com/calmjs/calmjs

法律

CALMJS项目版权所有(c)2016奥克兰生物工程 奥克兰大学研究所。 calmjs 根据条款获得许可 GPLV2或更高版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
从方法名创建java查询无效。正在尝试筛选可分页的   构造函数中的java异常消息   java为什么我在MAC OS X 10.11上看不到java_主路径?   java如何澄清用户的输入是否是二进制数?   java在ant脚本中将JVM参数传递给clover   从txt文件读取调查结果并输出每个调查答案频率的Java程序   java进程引擎。getDefaultProcessEngine()空点异常   java SpringSecurity:忽略服务器名的别名并强制重新登录   java pythonsocket[Errno 57]socket未连接,尽管响应良好   使用Commons或Guava将文本文件转换为Java列表<String>   在hadoop中使用相同的输入文件为两个不同的任务创建两个输出文件   java方法toArray()不处理列表   我的应用程序中的java试图在Web服务器中更新数据库时获取通知。如何做到这一点?   java无法选择ListView项   java如何将变量传递给扩展类的方法   java使用片段中的数据绑定和相关活动的不同包   java出现读入文件问题,并将其设置为变量   JavaJSF2。0@EJB注入@ViewScoped导致MyFaces成为CFNE   java如何创建spring0boot项目?