使用 gradle/clojuresq 构建 clojure

2023-12-14

我正在尝试使用 gradle/Clojuresque 构建 clojure 代码,运行它并获取 uberjar。 我使用来自的提示http://dev.clojure.org/display/doc/Getting+Started+with+Gradle, https://bitbucket.org/kotarak/clojuresque/wiki/Getting%20Started, and Gradle for Clojure (Clojuresque) 出现“找不到 us.bpsm:edn-java:0.4.3”错误.

这是成绩脚本。

buildscript {
    repositories { 
        maven { url "http://clojars.org/repo" } 
        mavenCentral()
    }
    dependencies {
        classpath "clojuresque:clojuresque:1.7.0" 
    }
}

apply plugin: 'clojure'

clojure.aotCompile = true

repositories {
    flatDir dirs: project.file("lib/runtime")
    maven { url "http://clojars.org/repo" }
}

With gradle build任务,没有错误,我有一个 jar 文件,但我没有看到生成任何类文件;我认为生成的 jar 不包含任何内容,特别是当我比较手动构建的结果时(从命令行将 clojure 源代码编译为类(AOT)(不使用 lein)).

.
├── build
│   ├── libs
│   │   └── clojure.jar
│   └── tmp
│       └── jar
│           └── MANIFEST.MF
├── build.gradle
└── src
    └── hello
        └── core.clj

这是core.clj

(ns hello.core
  (:gen-class))
(defn -main
  "This should be pretty simple."
  []
  (println "Hello, World!"))

可能出了什么问题?另外,如何运行代码并获得 uberjar 之类的lein run and lein uberjar does?

我将目录压缩到https://dl.dropboxusercontent.com/u/10773282/share/2015/clojure_test.zip


创建类文件

源代码应位于./src/main/clojure因为它是默认目录。

不过,可以在 gradle 文件中指定源文件。

sourceSets {
    main {
        clojure {
            srcDirs = ['src']
        }
    }
}

另一个问题是缺少依赖项:

repositories {
    maven { url "http://clojars.org/repo" }
    mavenCentral()
}

dependencies {
    compile "org.clojure:clojure:1.6.0"
}

gradle build将生成类文件。

获取jar文件

我们需要为 jar 文件设置主类。

jar
{
    manifest.attributes("Main-Class": "hello.core")
}

我不太确定设置是否非常必要;gradle jar将生成 jar 文件。

执行jar文件

这是运行代码的命令:

java -cp .:<PATH>/clojure-1.6.0.jar:build/libs/clojure_test.jar hello.core

uberjar

需要进行三处修改:来自的提示https://github.com/DevonStrawn/Clojuresque-Boilerplate/blob/master/UberJar/build.gradle.

uberjar
{
    manifest.attributes("Main-Class": "hello.core")
}

apply plugin: 'application'

uberjar.enabled = true

执行 uberjar

现在只需一个 jar 即可执行

clojure_test> java -jar build/libs/clojure_test-standalone.jar 
Hello, World!

新的 build.gradle 文件

buildscript {
    repositories { 
        maven { url "http://clojars.org/repo" } 
        mavenCentral()
    }
    dependencies {
        classpath "clojuresque:clojuresque:1.7.0" 
    }
}

apply plugin: 'clojure'

clojure.aotCompile = true

sourceSets {
    main {
        clojure {
            srcDirs = ['src']
        }
    }
}

repositories {
    maven { url "http://clojars.org/repo" }
    mavenCentral()
}

dependencies {
    compile "org.clojure:clojure:1.7.0"
}

jar
{
    manifest.attributes("Main-Class": "hello.core")
}   

uberjar
{
    manifest.attributes("Main-Class": "hello.core")
}

apply plugin: 'application'

uberjar.enabled = true

影坛

从 Opal 的回答中,我添加了创建 ShadowJar 的 gradle 脚本。它包含设置主类的 MANIFEST 文件。

buildscript {
    repositories { 
        maven { url "http://clojars.org/repo" } 
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath "clojuresque:clojuresque:1.7.0" 
        classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.0'
    }
}

apply plugin: 'application'
apply plugin: 'clojure'
apply plugin: 'com.github.johnrengelman.shadow'

clojure.aotCompile = true
mainClassName = 'hello.core'

sourceSets {
    main {
        clojure {
            srcDirs = ['src']
        }
    }
}

repositories {
    maven { url "http://clojars.org/repo" }
    mavenCentral()
}

dependencies {
    compile "org.clojure:clojure:1.7.0" 
}

或者使用这两行代码代替清单更改代码:

apply plugin: 'application'
mainClassName = 'hello.core'

执行shadow jar

获取 ubjer jar

gradle shadow

和uberjar是一样的。

clojure_test> java -jar build/libs/clojure_test-all.jar 
Hello, World!

参考

  • https://github.com/johnrengelman/shadow
  • 锅炉板-https://github.com/DevonStrawn/Clojuresque-Boilerplate
  • 使用 Gradle 构建 uberjar
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gradle/clojuresq 构建 clojure 的相关文章

随机推荐

  • pip/python:普通站点包不可写

    我有一台新 Macbook 一个用户安装了它 然后我安装了一个新用户 我的 授予管理员权限并删除了旧用户 我在 Catalina 操作系统上 自从安装以来 我一直遇到一些权限问题 VSCode 找不到 Jupyter Notebook pi
  • 获取 Google Cloud Storage 中的文件列表 (Appengine PHP)

    我有一个 Google Cloud Storage 存储桶 MyBucket 它有 20 个项目 我想在我的 appengine PHP 应用程序中获取这些文件名 我正在考虑是否可以使用 App Engine 的内置 Google Clou
  • 正则表达式帮助 - python - 从 css 中提取所有图像 url

    我正在尝试从 css 文件中提取所有图像 jpg png gif uri 示例 CSS blockpricecont width 660px height 75px background url images postBack jpg re
  • 使用画布nodeJS模糊图像

    这好像是ctx filter blur amount 不起作用 这是我的代码 const body await request get url const data await Canvas loadImage body ctx filte
  • 在c#中通过位掩码存储多个值

    我试图通过位掩码将四个独立的 5 位值 0 31 存储在 32 位 int 内 但无法正确设置这些值 并从用于存储的掩码 int 中获取各个值 谁能帮我这个 Edit 抱歉外部链接 这里有一些 JavaScript 演示了我想要实现的目标
  • 如何在 ASP.NET Core 6 中将字段值从 true 切换为 false,反之亦然

    我正在使用 ASP NET Core 6 和 mongodb 作为数据库构建一个 API 我正在尝试设置某个字段以从 true 切换到 false 反之亦然 如果场isactive True 然后我必须将其更新为 false 反之亦然 我已
  • 解析apache日志文件

    我刚刚开始学习 Python 想读取 Apache 日志文件并将每行的部分内容放入不同的列表中 文件中的行 172 16 0 3 25 Sep 2002 14 04 19 0200 GET HTTP 1 1 401 Mozilla 5 0
  • Cassandra:插入 timeuuid 错误

    我有下表 create table test userId varchar notifId timeuuid notification varchar time bigint read boolean primary key userId
  • 带有 FileSystemWatcher 和 Timer 的 Windows 服务 - 确保所有内容都得到处理

    我创建了一个 C Windows 服务应用程序来启动FileSystemWatcher监视目录中文件的创建 找到文件后 我实例化一个自定义类 该类解析文件 CSV 并使用其内容调用 Web 服务 该服务在某种程度上是异步的 并返回一个唯一的
  • 使用 SUDS 时添加 xsi:type 和信封命名空间

    我需要与 SOAP 服务交互 但这样做遇到了很多麻烦 非常感谢对此的任何指示 原来的错误信息是 org apache axis2 databinding ADBException Any type element type has not
  • MySQL Select Query 生成动态列结果

    我需要编写一个动态返回列的查询 例如 我有一个包含列的表 tblTest Id Name Type Amount 1 Receipt Cash 100 2 Receipt Card 200 3 Receipt Cheque 250 4 Re
  • 如何将日期时间列四舍五入到最近的一刻钟

    我已将数据文件加载到 Python pandas 数据框中 我有一个格式的日期时间列2015 07 18 13 53 33 280 我需要做的是创建一个新列 将其四舍五入到最接近的一刻钟 因此 上面的日期将四舍五入为2015 07 18 1
  • Gradle应用程序插件:修改workingDir属性

    我只是想修改程序运行的目录 通常 它是从项目根目录运行的 这让我有点恼火 因为测试程序可能非常烦人 因为我的程序在运行时生成文件和文件夹 A JavaExec任务有一个属性称为JavaExec workingDir 这正是我想要修改为我选择
  • 使用数组进行字符串插值

    我正在尝试使用 php 创建链接 但遇到了一些困难 有人可以帮我弄这个吗 我希望链接转到 yourteam php 标题为变量 row User ID 的内容 echo tr td a href row User ID a td td b
  • 水平冻结一表列

    我有一个活动 其中我实现了一个表格视图 表格视图有标题和正文 表格可以水平和垂直滚动 这是活动源代码 public class ReportListActivity extends Activity TableLayout report t
  • 使用来自 PHP 网页的输入参数运行 .exe

    我目前正在尝试获取一个可执行文件以在 PHP 网页中运行 当前使用exec 从命令行运行时 该程序需要两个参数 我不确定使用 PHP 运行它的最佳方法是什么 特别是 可以使用以下语法从命令行运行 exe my program exe inp
  • 在 WooCommerce 我的帐户订单列表上显示产品缩略图

    我正在尝试在 WooCommerce 我的帐户 gt 订单列表中的订单号旁边显示产品缩略图 Below is the screenshot of the order 我必须使用什么钩子来显示图像 I tried 将产品图片添加到 Wooco
  • 在 PHP 中删除 JSON 数组元素,然后重新编码为 JSON

    function deleteNews selected file file get contents news json true data json decode file true unset file foreach selecte
  • 取消 jquery 可拖动对象或重置

    我想加载一个可以拖动到地图 div 上的对象页面 但想要有一个清除 撤消按钮 这可以用 jquery 实现吗 你可以在上一个问题中看到代码 jQuery UI droppables 更改删除的图像 这可以通过简单的调用来实现 animate
  • 使用 gradle/clojuresq 构建 clojure

    我正在尝试使用 gradle Clojuresque 构建 clojure 代码 运行它并获取 uberjar 我使用来自的提示http dev clojure org display doc Getting Started with Gr