2015-09-02 14 views
4

工作在我Leiningen項目中,我有以下配置:Leiningen Java的代理商不uberjar

:java-agents [[com.newrelic.agent.java/newrelic-agent "3.19.2"]] 

當運行我的應用程序在lein repl代理正在運行,但是當我創建uberjar並運行它如:

java -jar target/proclodo-spa-server-rendering.jar 

代理程序未啓動。我可以在我的uberjar中包含newrelic-agent.jar並傳遞-javaagent參數,但我試圖避免在我的存儲庫中存在大量不會自動升級的大型二進制Blob(爲什麼New Relic甚至推薦?)。我嘗試添加:

:bootclasspath true 

由於此評論:

;; Java agents can instrument and intercept certain VM features. Include 
;; :bootclasspath true to place the agent jar on the bootstrap classpath. 

,但它並沒有區別。代理jar應該如何放置在CLASSPATH中,以便我可以驗證它是否正常工作?

我正在使用Jetty,據說它會干擾bootclasspath,但我不確定它應該如何幹涉。一切似乎都運行良好,只是代理商沒有啓動。

回答

0

如果您自己運行java,則必須自己傳遞VM選項,例如要使用的調試代理。 Lein不能將它打包成jar:根本就沒有這樣做的機制。

+0

做什麼:bootclasspath然後呢?這個罐子似乎不在我的uberjar裏面。如何在沒有jar的情況下通過我的回購?這是不好的 – Pablo

+0

@Pablo這些真的是兩個新問題,而不是這一個的跟進。但是,簡單地說:一旦你使用leiningen來構建一個jar,就像其他任何基於java的jar一樣,你有一個jar,你可以在運行jar時查看如何設置agent;它不再是clojure特定的。如果您希望在您的部署環境中使用代理程序,則需要安排代理程序jar在那裏存在,並且還需要安排要傳遞的java-agent參數。 – amalloy

+0

例如,由於您使用newrelic,因此在運行時如何使用https://docs.newrelic.com/docs/agents/java-agent/installation/java-agent-manual-installation似乎是一個相當全面的解釋一個罐子。 – amalloy