How do I use checked-in jars with leiningen

后端 未结 3 1021
不知归路
不知归路 2020-12-28 08:47

We have some 3rd-party jars checked-in to our project. We\'d like to add them to the classpath. That\'s it. We don\'t want to set up a local maven repo (because that would b

相关标签:
3条回答
  • 2020-12-28 09:37

    I'd like to elaborate on @Jared314's excellent answer that helped me as well.

    Below is a script that automates the process of adding multiple jars from a local lib folder to a local repository:

    #!/bin/sh
    export LOCALREPO_USERNAME=
    export LOCALREPO_PASSWORD=
    
    for file in lib/*.jar
    do
        name=$(basename "$file")
        basename=${name%.jar}
    
        echo "Deploying $basename"
    
        artifactId="local/$basename"
        lein deploy localrepo1 $artifactId 1.0 $file
    
        echo "[$artifactId \"1.0\"]" >> dependencies.log
    done
    

    The list of Leiningen dependencies that can be added to project.clj is stored in dependencies.log.

    Before running the script, :repositories entry in project.clj has to be updated to allow for reading repository username and password from the environment:

      :repositories [["localrepo1" {:url "file:myrepo"
                                    :username :env/localrepo_username
                                    :password :env/localrepo_password}]]
    

    This will prevent the repository password prompt from displaying when running the script.

    0 讨论(0)
  • 2020-12-28 09:42

    You will need to setup a local maven repository, but that can be a simple directory, in your project directory, that you then check in to source control. (Which will maintain your 'check out and run' policy)

    As of Leiningen 2.2.0 the functionality to deploy jars is built-in with the lein deploy task. So, the task has simplified from previous versions.

    Create a directory inside your project called, in this example, myrepo. (The name is arbitrary)

    Add a :repositories entry in your project.clj file with a path to the local directory you created.

    :repositories [["localrepo1" "file:myrepo"]]
    

    Deploy your free floating jar to the repo.

    lein deploy localrepo1 com.blueant/fancypants 1.0.1 fancypants.jar
    

    And, add your dependency to your project.clj :dependencies vector as normal.

    :dependencies [[com.blueant/fancypants "1.0.1"]]
    

    The deploy task will generate the checksums and directory structure required to to tie into the lein dependency resolution. You can verify your jar is loaded correctly with the lein deps :tree command.

    Note: File paths in :repositories are formatted as URLs. So, /Users/user1/Desktop is file:///Users/user1/Desktop, and, a local directory within the project, myrepo is file:myrepo.

    0 讨论(0)
  • 2020-12-28 09:43

    This question has already been answered here.

    It is indeed possible, but there's a reason why maven and dependency management exists. If you have many dependencies changing versions creating a repo is the recommended approach.

    0 讨论(0)
提交回复
热议问题