how to switch between maven and maven30? - homebrew

I'm working on two projects that are very specific over which maven version is required.
To this end, I have installed maven 3.0.x and maven 3.2.x on my machine using:
# install maven 3.2.x
brew install maven
# install maven 3.0.x
brew install homebrew/versions/maven30
The maven executable points to 3.2.x:
snowch$ which mvn
/usr/local/bin/mvn
snowch$ ls -l /usr/local/bin/mvn
lrwxr-xr-x 1 snowch admin 29 12 Dec 08:58 /usr/local/bin/mvn -> ../Cellar/maven/3.2.3/bin/mvn
When I need to switch versions, I can do this:
sudo ln -s /usr/local/bin/mvn ../Cellar/maven/$requiredversion/bin/mvn
However, I'm hoping that there is a brew way of doing this.
Question: what is the brew way of switching maven versions?

To switch from maven 3.2.x to 3.0.x:
brew unlink maven && brew link maven30
To switch from maven 3.0.x to 3.2.x:
brew unlink maven30 && brew link maven

Related

Brew List and Install Specific Versions of Formula

I would like to install 2.6.X but cannot find documentation on how to specify a formula version. Brew is only installing the latest version of the formula.
I'm using the following versions of brew
Homebrew 1.8.6
Homebrew/homebrew-core (git revision 5ea559; last commit 2018-12-18)
Homebrew/homebrew-cask (git revision 4144b74; last commit 2018-12-18)
I'm upgrading from 2.2.1 and want to be pinned to 2.6.X
ls /usr/local/Cellar/ansible
2.2.1.0_2 2.3.1.0 2.7.5
brew search ansible
==> Formulae
ansible ✔ ansible-cmdb
ansible-lint ansible#1.9
ansible#2.0 terraform-provisioner-ansible
==> Casks
ansible-dk
brew install ansible
ansible --version
ansible 2.7.5
If someone could point me to the correct docs at https://docs.brew.sh/ to both list all available versions and to install specific versions that would be awesome.
Go to the directory containing formulas:
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
Look at the history of the ansible formula
git log -- ansible.rb
Select the commit where the version you are interested in is and checkout this formula:
git checkout f9466d14ee6e9fa7a -- ansible.rb
Install that formula:
HOMEBREW_NO_AUTO_UPDATE=1 brew install ansible
Check the installation of ansible:
ansible --version
Pin this version of the formula to avoid upgrade
brew pin ansible
That's it, an I'm not sure that this is in the documentation.

ruby-build: definition not found: 2.2.1

I want to install new version of ruby by rbenv install 2.2.1, but I get the error
ruby-build: definition not found: 2.2.1
The following versions contain 2.2.1 in the name:
rbx-2.2.1
rbx-2.2.10
Could you please let me know how should I install version 2.2.1?
Thanks in advance!
You should upgrade ruby-build to the latest version, ruby-build is an rbenv plugin that provides an rbenv install command to compile and install different versions of Ruby on UNIX-like systems.
Using Homebrew package manager:
brew upgrade ruby-build --HEAD
If ruby-build-HEAD already installed try reinstalling it
brew reinstall ruby-build --HEAD
You can look for the current stable ruby version number at:
https://www.ruby-lang.org/en/downloads/
Then use rbenv to see the upgraded list of available options:
rbenv install --list
Install latest stable version as below (replace 2.2.2 with your version string):
rbenv install 2.2.2
rbenv rehash
To list and verify all installed versions:
rbenv versions
To set as the global ruby version (in this case 2.2.2):
rbenv global 2.2.2
Hope this helps you and everyone else who faces similar situation in future.
Most of the answer here use brew command. So in case, you are on Ubuntu, then do these.
cd ~/.rbenv
git pull
cd ~/.rbenv/plugins/ruby-build/
git pull
Just in case anyone else runs into this issue using the asdf package manager, simply update your plugins by running:
asdf plugin update --all
This will make sure you are on the latest version of ruby-build
Try to update your ruby-build manually from the repository by using this command:
/Users/your-user/.rbenv/plugins/ruby-build && git pull
Replace "your-user" with your Mac User
Once you've done that you can run the install:
rbenv install 2.2.1
The easiest way if you're using Linux and have git installed:
git -C ~/.rbenv/plugins/ruby-build pull
I upgraded homebrew
brew update && brew upgrade
and then was able to upgrade to 2.2.1
rbenv install '2.2.1'
Hope this helps!

Brew versions unknown command mavericks

I´m having problems with the brew versions command, I´m trying to run
brew versions grails
Error: Unknown command: versions
which brew 127 ↵
/usr/local/bin/brew
brew -v
Homebrew 0.9.5
Try this first:
brew tap homebrew/boneyard
as versions option is obsolete.
UPDATE: they've started putting multiple versions in homebrew-core (see the message here), so now you'll see it by default:
$ brew update
$ brew search grails
grails grails#2.5
Info about the deprecated "homebrew/versions":
The versions command was obsoleted in favor of homebrew-versions, which is a separate tap with formulas pointing to specific versions of packages. You can add it with brew tap homebrew/versions and brew update, then you'll see specific versions from the tap like this:
$ brew search grails
grails homebrew/versions/grails20 homebrew/versions/grails22
homebrew/versions/grails224 homebrew/versions/grails13 homebrew/versions/grails21
homebrew/versions/grails223 homebrew/versions/grails23
$ brew install homebrew/versions/grails223
You can also look at the git commit log from the regular tap and pick a version that way:
$ brew log grails
commit eeacedb303093999c60d5696e3385213021dc1eb
Author: Christian-Manuel Butzke <chris#fruwe.com>
Date: Wed Jan 27 10:28:42 2016 +0900
grails 3.0.12
Closes #48501.
Signed-off-by: Martin Afanasjew <martin#afanasjew.de>
commit bbdbbe29827d77e5f530d804a07e9985f74d8cbe
Author: Xu Cheng <xucheng#me.com>
. . .
$ cd $(brew --prefix)
$ git checkout bbdbbe29827d77e5f530d804a07e9985f74d8cbe Library/Formula/grails.rb
$ brew install grails
When I ran brew tap homebrew/boneyard and then brew versions node I got the following, which looks like the proper replacement:
You should use the homebrew-versions tap instead:
https://github.com/Homebrew/homebrew-versions
Cheers!

How can I brew link a specific version?

I have a few kegs of the same package in /usr/local/Cellar/libfoo like /usr/local/Cellar/libfoo/1.0.1, /usr/local/Cellar/libfoo/HEAD and /usr/local/Cellar/libfoo/mycopy
How can I brew link to a specific version?
This is probably the best way as of 11.1.2022:
To install a specific version, e.g. postgresql 9.5 you simply run:
$ brew install postgresql#9.5
To list the available versions run a search with #:
$ brew search postgresql#
==> Formulae
postgresql postgresql#11 postgresql#13 postgresql#9.5 qt-postgresql
postgresql#10 postgresql#12 postgresql#9.4 postgresql#9.6 postgrest
==> Casks
navicat-for-postgresql
DEPRECATED in Homebrew 2.6.0 (December 2020):
The usage info:
Usage: brew switch <formula> <version>
Example:
brew switch mysql 5.5.29
You can find the versions installed on your system with info.
brew info mysql
And to see the available versions to install, you can provide a dud version number, as brew will helpfully respond with the available version numbers:
brew switch mysql 0
Update (15.10.2014):
The brew versions command has been removed from brew, but, if you do wish to use this command first run brew tap homebrew/boneyard.
The recommended way to install an old version is to install from the homebrew/versions repo as follows:
$ brew tap homebrew/versions
$ brew install mysql55
For detailed info on all the ways to install an older version of a formula read this answer.
Sadly brew switch is deprecated in Homebrew 2.6.0 (December 2020)
$ brew switch
Error: Unknown command: switch
TLDR, to switch to package version 10:
brew unlink package
brew link package#10
To use another version of a package, for example node:
First, ensure that the specific version is installed using brew list. My package here is node (16) and node#14.
➜ ~ brew list
==> Formulae
node
node#14
➜ ~ node -v
v16.1.0
Unlink the current package: brew unlink node.
➜ ~ brew unlink node
Unlinking /usr/local/Cellar/node/16.1.0... 7 symlinks removed.
Link the correct version
➜ ~ brew link node#14
Linking /usr/local/Cellar/node#14/14.16.1_1... 3857 symlinks created.
If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/node#14/bin:$PATH"' >> ~/.zshrc
➜ ~ node -v
v14.16.1
Homebrew removed brew switch subcommand in Homebrew 2.6.0. Get it back from here.
brew tap laggardkernel/tap
brew switch --help
name#version formula
There's mainly two ways to switch to an old version of an app.
If it's a bigger version change. Homebrew may have created a versioned package in the repo. Like go, go#1.10, they are two different formulae, installed into two different locations.
# install the old one
brew install go#1.10
# link the executable into /usr/local/bin, or /opt/homebrew/bin
brew link --overwrite --force go#1.10
brew switch
But not every package has a versioned variant. If you just upgraded to the new version and the old one is still in your system, skip step 1, 2.
In this situation, search in the homebrew-core repo and download the specific formula. e.g. mysql 8.0.23
Download the raw file, and install from it brew install /path/to/downloaded/mysql.rb.
Now both the latest and the old 8.0.23 (same formula mysql) exist, switch (link out) the old version with brew switch mysql 8.0.23
brew info mysql will list all the old version still exist.
Step 1, 2 could be replaced by brew extract, but that requires user maintain its own tap. I won't cover it here, just search it if you're interested.
If you have installed, for example, php 5.4 it could be switched in the following way to php 5.5:
$ php --version
PHP 5.4.32 (cli) (built: Aug 26 2014 15:14:01)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
$ brew unlink php54
$ brew switch php55 5.5.16
$ php --version
PHP 5.5.16 (cli) (built: Sep 9 2014 14:27:18)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
brew switch libfoo mycopy
You can use brew switch to switch between versions of the same package, if it's installed as versioned subdirectories under Cellar/<packagename>/
This will list versions installed ( for example I had Cellar/sdl2/2.0.3, I've compiled into Cellar/sdl2/2.0.4)
brew info sdl2
Then to switch between them
brew switch sdl2 2.0.4
brew info
Info now shows * next to the 2.0.4
To install under Cellar/<packagename>/<version> from source you can do for example
cd ~/somewhere/src/foo-2.0.4
./configure --prefix $(brew --Cellar)/foo/2.0.4
make
check where it gets installed with
make install -n
if all looks correct
make install
Then from cd $(brew --Cellar) do the switch between version.
I'm using brew version 0.9.5
In case brew switch produces an error (in this example trying to switch to node version 14):
> brew switch node 14
Error: Calling `brew switch` is disabled! Use `brew link` #-versioned formulae instead.
The correct way switching versions would be :
> brew link --overwrite node#14
if #simon's answer is not working in some of the mac's please follow the below process.
If you have already installed swiftgen using the following commands:
$ brew update
$ brew install swiftgen
then follow the steps below in order to run swiftgen with older version.
Step 1: brew uninstall swiftgen
Step 2: Navigate to: https://github.com/SwiftGen/SwiftGen/releases
and download the swiftgen with version: swiftgen-4.2.0.zip.
Unzip the package in any of the directories.
Step 3:
Execute the following in a terminal:
$ mkdir -p ~/dependencies/swiftgen
$ cp -R ~/<your_directory_name>/swiftgen-4.2.0/ ~/dependencies/swiftgen
$ cd /usr/local/bin
$ ln -s ~/dependencies/swiftgen/bin/swiftgen swiftgen
$ mkdir ~/Library/Application\ Support/SwiftGen
$ ln -s ~/dependencies/swiftgen/templates/ ~/Library/Application\ Support/SwiftGen/
$ swiftgen --version
You should get: SwiftGen v0.0 (Stencil v0.8.0, StencilSwiftKit v1.0.0, SwiftGenKit v1.0.1)

Can I do a dry run with homebrew to see the details of what will be installed and how?

Is it possible to run in a verbose mode where it doesn't actually install the package, but just details from where and how it will be install the package?
You can run brew outdated to see a list of outdated packages that will be upgraded when running brew upgrade.
The closest you'll find is to show the dependencies of the package you're trying to install:
$ brew deps ruby
Will list the packages of ruby. You can then use:
$ brew list
to see which packages you have installed. From these two commands, you will be able to tell which packages will be installed by brew install ruby
I've used gentoo linux quite a bit in the past, and their portage system has a nice 'pretend' option for installing packages, the closest I've found for brew is:
brew list (package name)
brew list ruby gives me:
/usr/local/Cellar/ruby/1.9.2-p0/bin/tilt
/usr/local/Cellar/ruby/1.9.2-p0/bin/testrb
/usr/local/Cellar/ruby/1.9.2-p0/bin/ruby
/usr/local/Cellar/ruby/1.9.2-p0/bin/ri
/usr/local/Cellar/ruby/1.9.2-p0/bin/rdoc
/usr/local/Cellar/ruby/1.9.2-p0/bin/rake
/usr/local/Cellar/ruby/1.9.2-p0/bin/rackup
/usr/local/Cellar/ruby/1.9.2-p0/bin/irb
/usr/local/Cellar/ruby/1.9.2-p0/bin/gem
/usr/local/Cellar/ruby/1.9.2-p0/bin/erb
/usr/local/Cellar/ruby/1.9.2-p0/include/ruby-1.9.1/ (21 files)
/usr/local/Cellar/ruby/1.9.2-p0/lib/libruby.1.9.1.dylib
/usr/local/Cellar/ruby/1.9.2-p0/lib/ruby/ (998 files)
/usr/local/Cellar/ruby/1.9.2-p0/lib/ (3 other files)
/usr/local/Cellar/ruby/1.9.2-p0/share/man/ (5 files)
/usr/local/Cellar/ruby/1.9.2-p0/share/ri/ (9522 files)
But I'm guessing you're looking for more info than this?
The brew install --dry-run feature was recently added.
brew install --dry-run vim
==> Would install 1 formula:
vim
==> Would install 5 dependencies for vim:
lua berkeley-db perl libyaml ruby

Resources