lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erick Erickson <erickerick...@gmail.com>
Subject Re: running solr 6.x in Eclipse for debugging
Date Thu, 06 Oct 2016 01:57:56 GMT
John:

The simple answer is "cheat"....

It takes a little fiddling, but here's what I do in IntelliJ:

1> use IntelliJ to create an "artifact" that's just the jar WITHOUT
the associated Solr jar dependencies, just the compiled output
1a> Find the bits in <1>. It's usually under my project somewhere
...out/artifacts/whatever/whatever.jar
1aa> use something like "tar -xvf yourjar.jar" to verify the classes
are in it that you expect.
1b> Be sure when creating the "artifacts" to check the (non obvious)
"build on make" checkbox OR be sure you use "build artifacts" from the
build menu when you want to debug.
1c> execute "ant server dist" first. The "dist"directory (and possibly
the solrj-lib below it) will contain all of the Solr jars you should
need.
2> Now change solrconfig.xml to add a <lib.../> directive to point to <1a>.
3> At this point, you don't have to copy anything around anywhere.
Every time you rebuild your project/plugin the new jar is picked up
when you restart Solr. All the Solr jars you depend on for your plugin
are loaded and available when Solr starts. If you have suspend=y set
in your start command, you can set breakpoints in your initialization
(or anywhere else) in your plugin (or anywhere in Solr).

HINT: If at all possible and you can write a Junit test, it's easier
to just debug _that_ than go all the stuff above, you can debug
individual junit tests..

FWIW,
Erick

On Wed, Oct 5, 2016 at 2:12 PM, John Bickerstaff
<john@johnbickerstaff.com> wrote:
> I've found this much in build.xml...
>
>  I'm assuming Ant puts the compiled jars into the paths listed below.
>
> Further hints gratefully accepted if someone knows specifically how to set
> this up from top to bottom. I assume the Eclipse build path puts the jars
> into the referenced directories...?
>
> <target name="dist"
>
>           description="Creates the Webapp folder for distribution."
>
>           depends="dist-core, dist-solrj, lucene-jars-to-solr">
>
>     <ant dir="${common-solr.dir}" inheritall="false" target=
> "contribs-add-to-webapp"/>
>
>     <mkdir dir="${server.dir}/solr-webapp/webapp"/>
>
>     <copy todir="${server.dir}/solr-webapp/webapp">
>
>       <fileset dir="web" excludes="${exclude.from.webapp}"/>
>
>       <fileset dir="${dest}/web" excludes="${exclude.from.war}"/> <!--
> contribs' additions -->
>
>     </copy>
>
>     <mkdir dir="${server.dir}/solr-webapp/webapp/WEB-INF/lib"/>
>
>     <copy todir="${server.dir}/solr-webapp/webapp/WEB-INF/lib">
>
>       <fileset dir="${common-solr.dir}/core/lib" excludes=
> "${exclude.from.webapp},${common.classpath.excludes}"/>
>
>       <fileset dir="${common-solr.dir}/solrj/lib" excludes=
> "${exclude.from.webapp},${common.classpath.excludes}"/>
>
>       <fileset dir="${lucene-libs}" excludes=
> "${exclude.from.webapp},${common.classpath.excludes}" />
>
>       <fileset dir="${dist}" excludes=
> "${exclude.from.webapp},${common.classpath.excludes}">
>
>         <include name="solr-solrj-${version}.jar" />
>
>         <include name="solr-core-${version}.jar" />
>
>       </fileset>
>
>     </copy>
>
>   </target>
>
> On Wed, Oct 5, 2016 at 1:30 PM, John Bickerstaff <john@johnbickerstaff.com>
> wrote:
>
>> OK - I'm running now in debug mode.  My intent is to add and test a "hello
>> world" plugin to prove everything is wired up and that I can debug all the
>> way into the plugin I wrote...
>>
>> I want to test plugins/addons which, as I understand it go here if you're
>> adding them to an installed version of Solr.
>>
>> solr-6.x.x/server/solr-webapp/webapp/WEB-INF/lib/
>>
>> So - to get that all working (build and seeing source when in debug
>> mode)...
>>
>> 1. Where, exactly, should I place the source code for a new plugin that is
>> NOT a part of the Solr distribution if I want to be able to debug through
>> that code as well?  (I understand that the appropriate entries will need to
>> be in the correct xml files in the core/collection configurations)
>>
>> 2. Will I need to change the build.xml files in some way?  If yes, please
>> tell me how, I'm unfamiliar with Ant.
>>
>> 3. In case I'm in "X/Y problem mode" here - My goal is: Add plugin source
>> code, build, make config changes where needed, and see source when I put a
>> breakpoint in code.
>>
>>
>>
>> On Wed, Oct 5, 2016 at 12:04 PM, John Bickerstaff <
>> john@johnbickerstaff.com> wrote:
>>
>>> Thanks Mikhail!
>>>
>>> On Wed, Oct 5, 2016 at 11:29 AM, Mikhail Khludnev <mkhl@apache.org>
>>> wrote:
>>>
>>>> ok. it's "run-example" [ ..@solr]$ant -p
>>>>  run-example                  Run Solr interactively, via Jetty.
>>>> -Dexample.debug=true to en
>>>> able JVM debugger
>>>> I have it in master and branch_6x
>>>>
>>>> On Wed, Oct 5, 2016 at 5:51 PM, John Bickerstaff <
>>>> john@johnbickerstaff.com>
>>>> wrote:
>>>>
>>>> > Mikhail -- which version of Solr are you using to do this [ant example
>>>> > -Dexample.debug=true]
>>>> >
>>>> > I may be wrong, but it seems that "example" no longer works with
>>>> 6.x...?
>>>> >
>>>> > On Wed, Oct 5, 2016 at 1:14 AM, Mikhail Khludnev <mkhl@apache.org>
>>>> wrote:
>>>> >
>>>> > > launching ant example -Dexample.debug=true from Exlipse works to
me.
>>>> > > It takes a while for useless compile checks, then you can debug
>>>> remotely
>>>> > to
>>>> > > 5005.
>>>> > > Jetty process need to be terminated separately. SolrAdmin works,
>>>> > debugging
>>>> > > with sources works too.
>>>> > > However, there is no cores my default, you need to create them
>>>> manually.
>>>> > >
>>>> > > Probably the better way is to launch ant server, and then bin{\}solr
>>>> > start
>>>> > > -e ... -a ... and connect debugger remotely.
>>>> > >
>>>> > > On Wed, Oct 5, 2016 at 7:19 AM, Erick Erickson <
>>>> erickerickson@gmail.com>
>>>> > > wrote:
>>>> > >
>>>> > > > Warning: I use IntelliJ, but I think Eclipse works similarly.
>>>> > > >
>>>> > > > I'm a bit confused. Are you trying to _start_ Solr from
>>>> > > > within Eclipse? Or starting it from a command prompt?
>>>> > > >
>>>> > > > I do the latter and then attach a remote debugging session
>>>> > > > from within the IDE, which is what I think that link suggests
too.
>>>> > > >
>>>> > > > I also build 'ant server dist' from the install_dir/solr directory
>>>> > first.
>>>> > > > The 'ant eclipse' target just builds the project structure
for
>>>> Eclipse,
>>>> > > > it doesn't build Solr.
>>>> > > >
>>>> > > > YMMV of course since you're using a different IDE.
>>>> > > >
>>>> > > > Best,
>>>> > > > Erick
>>>> > > >
>>>> > > >
>>>> > > > On Tue, Oct 4, 2016 at 5:27 PM, John Bickerstaff
>>>> > > > <john@johnbickerstaff.com> wrote:
>>>> > > > > Thanks!
>>>> > > > >
>>>> > > > > This works...
>>>> > > > >
>>>> > > > > I'm getting a (possibly unrelated?) warning and can't
hit the
>>>> Admin
>>>> > > page
>>>> > > > (I
>>>> > > > > get a 503).  I DO see eclipse "hook into" the debug session
>>>> which is
>>>> > > > > excellent.
>>>> > > > >
>>>> > > > > The warning resolves to this:
>>>> > > > >
>>>> > > > > java.io.FileNotFoundException:
>>>> > > > > /Users/.../.../workspace/solr-6.2.1/solr/server/solr-webapp/
>>>> webapp
>>>> > > > >
>>>> > > > > Full stack trace below...
>>>> > > > >
>>>> > > > > I built the project using ant and ivy for eclipse.
>>>> > > > >
>>>> > > > > ant eclipse (inside the solr6.x.x directory per the instructions
>>>> I
>>>> > > > > referenced)
>>>> > > > >
>>>> > > > > I did not see a way to build the jetty portion - and
perhaps
>>>> that's
>>>> > > what
>>>> > > > > the problem is -- although the instructions here (
>>>> > > > > http://opensourceconnections.com/blog/2013/04/13/how-to-
>>>> > > > debug-solr-with-eclipse/)
>>>> > > > > about building jetty don't seem to work with this version
of
>>>> Solr...
>>>> > > > >
>>>> > > > > Any suggestions welcome.  It seems to me the jetty jars
are all
>>>> there
>>>> > > but
>>>> > > > > maybe I'm missing something.  Especially since the stack
trace is
>>>> > > > > complaining about "Web application not found"
>>>> > > > >
>>>> > > > > I'll dig into it more tomorrow...
>>>> > > > >
>>>> > > > > =========
>>>> > > > >
>>>> > > > > stack trace:
>>>> > > > >
>>>> > > > > 220  WARN  (main) [   ] o.e.j.w.WebInfConfiguration Web
>>>> application
>>>> > not
>>>> > > > > found
>>>> > > > > /Users/.../Documents/workspace/solr-6.2.1/solr/
>>>> > > server/solr-webapp/webapp
>>>> > > > > 221  WARN  (main) [   ] o.e.j.w.WebAppContext Failed
startup of
>>>> > context
>>>> > > > > o.e.j.w.WebAppContext@3b0090a4
>>>> > > > > {/solr,null,null}{/Users/jbickerstaff/Documents/
>>>> > > > workspace/solr-6.2.1/solr/server/solr-webapp/webapp}
>>>> > > > > java.io.FileNotFoundException:
>>>> > > > > /Users/.../Documents/workspace/solr-6.2.1/solr/
>>>> > > server/solr-webapp/webapp
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.webapp.WebInfConfiguration.unpack(
>>>> > > > WebInfConfiguration.java:497)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.webapp.WebInfConfiguration.preConfigure(
>>>> > > > WebInfConfiguration.java:72)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.webapp.WebAppContext.preConfigure(
>>>> > > > WebAppContext.java:480)
>>>> > > > > at org.eclipse.jetty.webapp.WebAppContext.doStart(
>>>> > > > WebAppContext.java:516)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.
>>>> > > > start(AbstractLifeCycle.java:68)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.bindings.StandardStarter.processBin
>>>> ding(
>>>> > > > StandardStarter.java:41)
>>>> > > > > at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(
>>>> > > > AppLifeCycle.java:188)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(
>>>> > > > DeploymentManager.java:499)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.DeploymentManager.addApp(
>>>> > > > DeploymentManager.java:147)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.providers.ScanningAppProvider.
>>>> > > > fileAdded(ScanningAppProvider.java:180)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.providers.WebAppProvider.
>>>> > > > fileAdded(WebAppProvider.java:458)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fil
>>>> eAdded(
>>>> > > > ScanningAppProvider.java:64)
>>>> > > > > at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:6
>>>> 10)
>>>> > > > > at org.eclipse.jetty.util.Scanner.reportDifferences(
>>>> > Scanner.java:529)
>>>> > > > > at org.eclipse.jetty.util.Scanner.scan(Scanner.java:392)
>>>> > > > > at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.
>>>> > > > start(AbstractLifeCycle.java:68)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.providers.ScanningAppProvider.
>>>> > > > doStart(ScanningAppProvider.java:150)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.
>>>> > > > start(AbstractLifeCycle.java:68)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(
>>>> > > > DeploymentManager.java:561)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.deploy.DeploymentManager.doStart(
>>>> > > > DeploymentManager.java:236)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.
>>>> > > > start(AbstractLifeCycle.java:68)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.ContainerLifeCycle.
>>>> > > > start(ContainerLifeCycle.java:132)
>>>> > > > > at org.eclipse.jetty.server.Server.start(Server.java:405)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.ContainerLifeCycle.
>>>> > > > doStart(ContainerLifeCycle.java:114)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.server.handler.AbstractHandler.
>>>> > > > doStart(AbstractHandler.java:61)
>>>> > > > > at org.eclipse.jetty.server.Server.doStart(Server.java:372)
>>>> > > > > at
>>>> > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.
>>>> > > > start(AbstractLifeCycle.java:68)
>>>> > > > > at org.eclipse.jetty.xml.XmlConfiguration$1.run(
>>>> > > > XmlConfiguration.java:1510)
>>>> > > > > at java.security.AccessController.doPrivileged(Native
Method)
>>>> > > > > at org.eclipse.jetty.xml.XmlConfiguration.main(
>>>> > > > XmlConfiguration.java:1435)
>>>> > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
>>>> > > > > at
>>>> > > > > sun.reflect.NativeMethodAccessorImpl.invoke(
>>>> > > > NativeMethodAccessorImpl.java:62)
>>>> > > > > at
>>>> > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(
>>>> > > > DelegatingMethodAccessorImpl.java:43)
>>>> > > > > at java.lang.reflect.Method.invoke(Method.java:498)
>>>> > > > > at org.eclipse.jetty.start.Main.invokeMain(Main.java:214)
>>>> > > > > at org.eclipse.jetty.start.Main.start(Main.java:457)
>>>> > > > > at org.eclipse.jetty.start.Main.main(Main.java:75)
>>>> > > > > 240  INFO  (main) [   ] o.e.j.s.ServerConnector Started
>>>> > > > > ServerConnector@68e5eea7{HTTP/1.1,[http/1.1]}{0.0.0.0:8983}
>>>> > > > > 240  INFO  (main) [   ] o.e.j.s.Server Started @18534ms
>>>> > > > >
>>>> > > > >
>>>> > > > >
>>>> > > > > On Tue, Oct 4, 2016 at 4:45 PM, Jihwan Kim <jihwan11@gmail.com>
>>>> > wrote:
>>>> > > > >
>>>> > > > >> I read your first reference and run the following
command on the
>>>> > > > >> Solr_Installed Dir.  I am using v. 6.2.0 and 4.10.4.
 both
>>>> works.
>>>> > > > >>
>>>> > > > >> bin/solr start -f -a "-Xdebug
>>>> > > > >> -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=7666"
>>>> > > > >>
>>>> > > > >> On Tue, Oct 4, 2016 at 5:26 PM, John Bickerstaff
<
>>>> > > > john@johnbickerstaff.com
>>>> > > > >> >
>>>> > > > >> wrote:
>>>> > > > >>
>>>> > > > >> > All,
>>>> > > > >> >
>>>> > > > >> > I've found some hints, but can't get Solr running
in debug
>>>> mode in
>>>> > > > >> eclipse
>>>> > > > >> > with the instructions
>>>> > > > >> >
>>>> > > > >> > Here:
>>>> > > > >> > http://opensourceconnections.com/blog/2013/04/13/how-to-
>>>> > > > >> > debug-solr-with-eclipse/
>>>> > > > >> >
>>>> > > > >> > or Here: http://wiki.apache.org/solr/HowToConfigureEclipse
>>>> > > > >> >
>>>> > > > >> > When I run this command from the wiki : java
-Xdebug
>>>> > > > >> > -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=7666
>>>> > -jar
>>>> > > > >> > start.jar
>>>> > > > >> >
>>>> > > > >> > I get an error: WARNING: Nothing to start, exiting
...
>>>> > > > >> >
>>>> > > > >> > I can't start the jar file "normally" either
and it turns out
>>>> to
>>>> > be
>>>> > > a
>>>> > > > >> > symlink.
>>>> > > > >> >
>>>> > > > >> > I'm thinking that things are different now given
that the way
>>>> to
>>>> > > start
>>>> > > > >> Solr
>>>> > > > >> > is this way:
>>>> > > > >> >
>>>> > > > >> > bin/solr start -e cloud -noprompt
>>>> > > > >> >
>>>> > > > >> > Can anyone point me at documentation or drop
a hint?
>>>> > > > >> >
>>>> > > > >>
>>>> > > >
>>>> > >
>>>> > >
>>>> > >
>>>> > > --
>>>> > > Sincerely yours
>>>> > > Mikhail Khludnev
>>>> > >
>>>> >
>>>>
>>>>
>>>>
>>>> --
>>>> Sincerely yours
>>>> Mikhail Khludnev
>>>>
>>>
>>>
>>

Mime
View raw message