魔法

IJava 中的魔法与 IPython 中的魔法非常相似。其中有:

  • 行魔法:这是通过一个魔法函数的内联函数调用。

    %mavenRepo oss-sonatype-snapshots https://oss.sonatype.org/content/repositories/snapshots/
    %maven io.github.spencerpark:jupyter-jvm-basekernel:2.0.0-SNAPSHOT
    List<String> addedJars = %jars C:/all/my/*.jar
    
  • 单元格魔法:这是整个单元格的函数调用,将单元格的主体作为一个特殊参数。

    %%loadFromPOM
    <repository>
      <id>oss-sonatype-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>
    
    <dependency>
      <groupId>io.github.spencerpark</groupId>
      <artifactId>jupyter-jvm-basekernel</artifactId>
      <version>2.0.0-SNAPSHOT</version>
    </dependency>
    

在需要编程访问的情况下,这些魔法只是简单地解读为对 lineMagiccellMagic 的调用。这些函数在笔记本命名空间中,其签名如下。请注意返回类型,它允许隐式转换为所需的任何类型,但这些检查并不安全。

  • <T> T lineMagic(String name, java.util.List<String> args)

  • <T> T cellMagic(String name, java.util.List<String> args, String body)

IJava 提供的魔法

有可能成为魔法的东西是内核元函数或操作源代码的函数。魔法应该只用于只在类似 Jupyter 的环境中出现并且只使用字符串参数的东西。其他东西(如 displayrender)应该作为普通函数提供。

jars

在笔记本 classpath 中添加 jars。

Line magic

  • arguments:

    • varargs 列出了本地文件系统中 jars 的简单 glob 路径。如果 glob 匹配了一个目录,该目录中的所有文件都将被添加。

classpath

向笔记本 classpath 添加条目。

Line magic

  • arguments:

    • varargs 列出了本地文件系统上的条目的简单 glob 路径。这包括目录或 jars。

addMavenDependencies

将 maven 工件添加到笔记本 classpath。所有横向依赖也被添加到 classpath 中。另见 addMavenRepo

Line magic

  • aliases: addMavenDependency, maven

  • arguments:

    • varargs 形式为 groupId:artifactId:[packagingType:[classifier]]:version 的依赖性坐标列表

addMavenRepo

在使用 addMavenDependencies 时,添加一个要搜索的 maven 仓库。

Line magic

  • aliases: mavenRepo

  • arguments:

    • repository id

    • repository url

loadFromPOM

加载 POM 中指定的任何依赖性。这将忽略用 addMavenRepo 添加的资源库,因为 POM 可能会指定它自己的资源库。

单元格魔法的设计是为了使其非常简单地从任何 README 中复制和粘贴指定的 maven POM 片段,以用于依赖一个工件(包括除中央仓库以外的仓库)。

Line magic

  • arguments:

    • path to local POM file

    • varargs 用来过滤依赖关系的作用域类型的列表。如果没有提供,则默认为 compileruntimesystemimport

单元格魔法

  • arguments:

    • varargs 用来过滤依赖关系的作用域类型的列表。如果没有提供,则默认为 compileruntimesystemimport

  • body:一个 partial POM 字面值。

    如果 body 是一个 xml <project> 标签,那么主体就会作为 POM 使用,而不会被修改。

    否则,这个魔法会试图根据它得到的 xml 片段来建立一个 POM。

    <modelVersion><groupId><artifactId><version> 如果不提供,就给默认值,除了它们恰好是复制粘贴的内容外,没有理由提供。

    所有 <dependencies><repositories> 的子代都被收集起来,连同任何松散的 <dependency>repository 标签

    例如:要添加一个不在中央的依赖,只需添加一个有效的 <repository><dependency>,魔术师就会把它放到 POM 中。

    %%loadFromPOM
    <repository>
      <id>oss-sonatype-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>
    
    <dependency>
      <groupId>io.github.spencerpark</groupId>
      <artifactId>jupyter-jvm-basekernel</artifactId>
      <version>2.0.0-SNAPSHOT</version>
    </dependency>