Tôi muốn có thể truy vấn hoặc nhúng chuỗi phiên bản do dự án leiningen thiết lập và hiển thị giá trị đó cho người dùng. Sử dụng bao gồm hiển thị chuỗi phiên bản từ CLI hoặc làm tiêu đề trong ứng dụng vòng. Điều này có thể không?Nhúng chuỗi phiên bản từ dự án leiningen vào ứng dụng
Trả lời
Nếu bạn đang chạy bên trong Leiningen sử dụng lein run
hoặc thích, nó có sẵn dưới dạng thuộc tính hệ thống: (System/getProperty "myproject.version")
. Nếu bạn đang sản xuất một cái lọ bạn cần đọc pom.properties
.
nếu bạn tạo tệp jar, bạn có thể extract the current version from the jar file.
nếu không bạn không thực hiện AOT thì bạn có thể read
tệp project.clj (vì đó là bản đồ) và sau đó trích xuất phiên bản.
Tôi chắc chắn hy vọng có một giải pháp ngắn thanh lịch hơn viết một plugin leiningen cho điều này (trừ khi ai đó muốn viết những dòng này, gợi ý gợi ý ..)
Tôi thích câu trả lời của công nghệ, nhưng tôi phải tìm cách "đọc pom.properties
". Nó chỉ ra rằng cho maven vật com.example/my-dự án, có một tập tin trên classpath dưới
META-INF/maven/com.example/my-project/pom.properties
mà bạn có thể đọc vào một java.util.Properties và nhận ra một "phiên bản" chìa khóa .
(ns com.example.version
(:require [clojure.java.io :as io])
(:import (java.util Properties)))
(defn read-project-version [groupid artifact]
(-> (doto (Properties.)
(.load (-> "META-INF/maven/%s/%s/pom.properties"
(format groupid artifact)
(io/resource)
(io/reader))))
(.get "version")))
Có người đã viết một thư viện đẹp để xử lý này: https://github.com/trptcolin/versioneer
Nó hoạt động cho các dự án Lein, cả hai chạy trong Lein và từ một uberjar. Sử dụng nó như sau (lấy từ trang Github):
Thêm phần này vào project.clj của bạn:
[trptcolin/versioneer "0.2.0"]
Sau đó, trong mã của bạn, làm một cái gì đó như thế này, nơi GROUP-ID và ARTIFACT-ID là số nhận dạng Leiningen/Maven thông thường cho dự án của bạn.
user=> (require '[trptcolin.versioneer.core :as version]) nil user=> (version/get-version "GROUP-ID" "ARTIFACT-ID") "1.2.3-SNAPSHOT"
Điều này vẫn hoạt động và dễ dàng nhất lựa chọn cho đến nay. – jwhitlark
Sau đây là cách tôi đọc tên dự án của tôi và phiên bản, lưu ý rằng tập tin project.clj
được đọc trong biên soạn và jar tập tin đơn giản có chứa chuỗi:
(defmacro proj-version []
(some->> (slurp "project.clj") clojure.edn/read-string (drop 1) (take 2) (str/join " ")))
(defn -main []
(println (proj-version))
như vậy cho (defproject abc "1.2.3" ...
, khi bạn chạy -main
nó sẽ in:
abc 1.2.3
- 1. Dự án cấp Leiningen Plugin
- 2. Làm việc với Java từ Emacs trong dự án Leiningen
- 3. Làm thế nào để nhúng phiên bản dự án nguyên mẫu trong nguyên mẫu Maven?
- 4. Nhúng một dự án cmake vào trong một dự án khác?
- 5. Nhúng số phiên bản SVN vào thời gian biên dịch trong ứng dụng Windows
- 6. Điều khiển phiên bản nhúng trong Ứng dụng
- 7. .NET: nhúng tập tin EXE vào dự án
- 8. Nhúng tài nguyên vào một dự án C++/CLI
- 9. Nhúng tệp wav vào dự án AS3 Flash/Flex?
- 10. Nhúng Dart vào ứng dụng
- 11. Cách tạo phiên bản 'Pro' của dự án Xcode
- 12. Làm cách nào để thêm các bài kiểm tra đơn vị vào dự án Leiningen?
- 13. Kiểm soát phiên bản cho các dự án Adobe Flash
- 14. Gia tăng Phiên bản Dự án Maven với Jenkins/Git
- 15. Intellij Debugging lấy tập tin dự án phiên bản cũ
- 16. Kiểm tra phiên bản VS của Dự án C#
- 17. Thêm phiên vào httpContext giả trong dự án C# MVC
- 18. Phiên bản ứng dụng iOS
- 19. Nhúng vỏ Python từ xa vào một ứng dụng
- 20. Nhập dự án vào Sonar
- 21. Làm thế nào để đưa phiên bản dự án maven vào tệp kê khai chiến dịch?
- 22. Cài đặt phiên bản mới của dự án triển khai trên phiên bản cũ
- 23. Làm cách nào tôi có thể thiết lập leiningen để làm việc với nhiều dự án?
- 24. Hai ứng dụng Android trong cùng một dự án Eclipse?
- 25. Tải phiên bản Django cho ứng dụng
- 26. Cách chọn phiên bản .NET để biên dịch dự án?
- 27. xóa dự án IntelliJ khỏi điều khiển phiên bản
- 28. Tôi nên kiểm soát phiên bản C# dự án nào?
- 29. Cách thay đổi phiên bản JDK cho dự án Eclipse
- 30. Lập trình phiên bản Maven của dự án của bạn
Thật không may dường như nó không hoạt động, sau đây trả về nil, w hen được gọi là sử dụng java trên một uberjar từ một lớp AOT: '(println" blargl "(.getSpecificationVersion (.getPackage (class * ns *)))" \ n "))' – MrEvil