Optim.jl --- Do all Methods Allow Box Constraints? Should all Work Without Them?

I have a parameter that should be strictly positive. The unconstrained optimizer attempts negative values in the search, and I am trying to force it to focus on only nonnegative values by adding lower and upper bounds.
So I changed
optimize(θ -> loglike(θ, r, x, y, R, c, d, p0, B), lower, upper, theta, BFGS(), Optim.Options(g_tol = 1e-1, allow_f_increases = true, iterations=100_000, show_trace=true, show_every=1))
to
optimize(θ -> loglike(θ, r, x, y, R, c, d, p0, B), lower, upper, theta, Fminbox(GradientDescent()), Optim.Options(g_tol = 1e-1, allow_f_increases = true, iterations=100_000, show_trace=true, show_every=1))
The program runs, but the gradient seems to be oscillating so it never converges. Is this related to GradientDescent?