Đối với nền, tôi đang thử nghiệm bằng cách viết trình phân tích cú pháp DSL, sử dụng tuyệt vời example này. Thật không may khi tôi điều chỉnh dòng này để sử dụng trong ứng dụng của riêng tôi:Cách tạo đối tượng GroovyShell với đường dẫn lớp của ứng dụng ngữ cảnh
Script dslScript = new GroovyShell().parse(dsl.text)
Tôi nhận được lỗi phân giải lớp khi chạy, vì các tệp miền DSL có mã tham chiếu đến các lớp bên ngoài khác. Ứng dụng ngữ cảnh có quyền truy cập vào các lớp này, nhưng tôi không biết cách cấp quyền truy cập chúng cho đối tượng GroovyShell mới, hoặc bằng cách nào đó, hãy sử dụng môi trường thời gian chạy của ứng dụng ngữ cảnh để phân tích cú pháp tệp.
Đúng. Chỉ cần đến một giải pháp tương tự vì điều này trong Grails: Script dslScript = new GroovyShell (grailsApplication.classLoader) .parse (dsl.text) –
Điều này có giải quyết được vấn đề với PermSpace không, nơi này để lại thông tin lớp ở đó và bạn có thể chạy ra khỏi PermSpace cuối cùng? Xem tại đây: http://stackoverflow.com/questions/24169976/understanding-groovy-grails-classloader-leak https://issues.apache.org/jira/browse/GROOVY-2875 Vì vậy, tôi tự hỏi nếu điều này có thể được đề nghị cho các ứng dụng máy chủ hay không, –
Đã lâu rồi, nhưng tôi tưởng tượng nó vẫn chỉ biên dịch một lớp mới. Nếu đúng như vậy, hiệu ứng sẽ tương tự như 'parseClass' – clmarquart