@@ -157,79 +157,92 @@ private void clearClassLoader() {
157157
158158 private void loadClassLoader () {
159159 Sources sources = ProjectUtils .getSources (project );
160- if (sources != null ) {
161- if (loader != null ) {
162- removeClassLoader (loader );
160+ if (sources == null ) {
161+ return ;
162+ }
163+
164+ if (loader != null ) {
165+ removeClassLoader (loader );
166+ }
167+ SourceGroup [] groups = sources .getSourceGroups (JavaProjectConstants .SOURCES_TYPE_JAVA );
168+ List <URL > urls = new LinkedList <>();
169+ for (SourceGroup sourceGroup : groups ) {
170+ ClassPath path = ClassPath .getClassPath (sourceGroup .getRootFolder (), ClassPath .EXECUTE );
171+ if (path == null ) {
172+ continue ;
163173 }
164- SourceGroup [] groups = sources .getSourceGroups (JavaProjectConstants .SOURCES_TYPE_JAVA );
165- List <URL > urls = new LinkedList <URL >();
166- for (SourceGroup sourceGroup : groups ) {
167- ClassPath path = ClassPath .getClassPath (sourceGroup .getRootFolder (), ClassPath .EXECUTE );
168- if (path != null ) {
169- classPaths .add (path );
170- path .addPropertyChangeListener (classPathListener );
171- FileObject [] roots = path .getRoots ();
172- for (FileObject fileObject : roots ) {
173- if (!fileObject .equals (getAssetFolder ())) {
174- fileObject .addRecursiveListener (listener );
175- logger .log (Level .FINE , "Add classpath:{0}" , fileObject );
176- classPathItems .add (new ClassPathItem (fileObject , listener ));
177- urls .add (fileObject .toURL ());
178- }
179- if (fileObject .toURL ().toExternalForm ().startsWith ("jar" )) {
180- logger .log (Level .FINE , "Add locator:{0}" , fileObject .toURL ());
181- jarItems .add (fileObject );
182- registerLocator (fileObject .toURL ().toExternalForm (),
183- "com.jme3.asset.plugins.UrlLocator" );
184- }
185- }
174+
175+ classPaths .add (path );
176+ path .addPropertyChangeListener (classPathListener );
177+ FileObject [] roots = path .getRoots ();
178+ for (FileObject fileObject : roots ) {
179+ if (!fileObject .equals (getAssetFolder ())) {
180+ fileObject .addRecursiveListener (listener );
181+ logger .log (Level .FINE , "Add classpath:{0}" , fileObject );
182+ classPathItems .add (new ClassPathItem (fileObject , listener ));
183+ urls .add (fileObject .toURL ());
184+ }
185+ if (fileObject .toURL ().toExternalForm ().startsWith ("jar" )) {
186+ logger .log (Level .FINE , "Add locator:{0}" , fileObject .toURL ());
187+ jarItems .add (fileObject );
188+ registerLocator (fileObject .toURL ().toExternalForm (),
189+ "com.jme3.asset.plugins.UrlLocator" );
186190 }
187191 }
188-
189- // Gradle
190- FileObject rootDir = FileUtil .toFileObject (GradleBaseProject .get (project ).getRootDir ());
191- Set <File > runtimeFiles = new HashSet <>();
192- try {
193- Project rootPrj = ProjectManager .getDefault ().findProject (rootDir );
194- GradleJavaProject rootGjp = GradleJavaProject .get (rootPrj );
195- for (GradleJavaSourceSet sourceSet : rootGjp .getSourceSets ().values ()) {
196- if (sourceSet .getName ().equals ("main" )) {
197- runtimeFiles = sourceSet .getRuntimeClassPath ();
198- }
199- }
200- } catch (IOException ex ) {
201- Exceptions .printStackTrace (ex );
202- } catch (IllegalArgumentException ex ) {
203- Exceptions .printStackTrace (ex );
192+ }
193+
194+ loadGradleClassLoader (urls );
195+
196+ loader = new URLClassLoader (urls .toArray (URL []::new ), getClass ().getClassLoader ());
197+ addClassLoader (loader );
198+ logger .log (Level .FINE , "Updated {0} classpath entries and {1} url locators for project {2}" , new Object []{classPathItems .size (), jarItems .size (), project .toString ()});
199+ }
200+
201+ private void loadGradleClassLoader (List <URL > urls ) {
202+ GradleBaseProject gradleProject = GradleBaseProject .get (project );
203+ if (gradleProject == null ) {
204+
205+ // Ant, Maven etc. project
206+ return ;
207+ }
208+
209+ FileObject rootDir = FileUtil .toFileObject (gradleProject .getRootDir ());
210+ Set <File > runtimeFiles = new HashSet <>();
211+ try {
212+ Project rootPrj = ProjectManager .getDefault ().findProject (rootDir );
213+ GradleJavaProject rootGjp = GradleJavaProject .get (rootPrj );
214+ for (GradleJavaSourceSet sourceSet : rootGjp .getSourceSets ().values ()) {
215+ if (sourceSet .getName ().equals ("main" )) {
216+ runtimeFiles = sourceSet .getRuntimeClassPath ();
217+ }
204218 }
205-
206- for (File file : runtimeFiles ) {
207- // logger.info(file.getName() + " : " + file.getAbsolutePath());
208- FileObject fo = FileUtil .toFileObject (file );
209- if (fo != null && !fo .isFolder ()) {
210- logger .info (fo .toURL ().toExternalForm ());
211- if (!fo .equals (getAssetFolder ())) {
212- fo .addRecursiveListener (listener );
213- logger .log (Level .FINE , "Add classpath:{0}" , fo );
214- classPathItems .add (new ClassPathItem (fo , listener ));
215- urls .add (fo .toURL ());
216- }
217- if (fo .toURL ().toExternalForm ().startsWith ("jar" )) {
218- logger .log (Level .FINE , "Add Gradle locator:{0}" , fo .toURL ());
219- jarItems .add (fo );
220- registerLocator (fo .toURL ().toExternalForm (),
221- "com.jme3.asset.plugins.UrlLocator" );
222- }
219+ } catch (IOException ex ) {
220+ Exceptions .printStackTrace (ex );
221+ } catch (IllegalArgumentException ex ) {
222+ Exceptions .printStackTrace (ex );
223+ }
224+
225+ for (File file : runtimeFiles ) {
226+ // logger.info(file.getName() + " : " + file.getAbsolutePath());
227+ FileObject fo = FileUtil .toFileObject (file );
228+ if (fo != null && !fo .isFolder ()) {
229+ logger .info (fo .toURL ().toExternalForm ());
230+ if (!fo .equals (getAssetFolder ())) {
231+ fo .addRecursiveListener (listener );
232+ logger .log (Level .FINE , "Add classpath:{0}" , fo );
233+ classPathItems .add (new ClassPathItem (fo , listener ));
234+ urls .add (fo .toURL ());
235+ }
236+ if (fo .toURL ().toExternalForm ().startsWith ("jar" )) {
237+ logger .log (Level .FINE , "Add Gradle locator:{0}" , fo .toURL ());
238+ jarItems .add (fo );
239+ registerLocator (fo .toURL ().toExternalForm (),
240+ "com.jme3.asset.plugins.UrlLocator" );
223241 }
224-
225-
226242 }
227-
228- loader = new URLClassLoader (urls .toArray (new URL [urls .size ()]), getClass ().getClassLoader ());
229- addClassLoader (loader );
230- logger .log (Level .FINE , "Updated {0} classpath entries and {1} url locators for project {2}" , new Object []{classPathItems .size (), jarItems .size (), project .toString ()});
231243 }
232244 }
245+
233246 FileChangeListener listener = new FileChangeListener () {
234247 public void fileFolderCreated (FileEvent fe ) {
235248 fireChange (fe );
@@ -258,6 +271,7 @@ private void fireChange(FileEvent fe) {
258271 updateClassLoader ();
259272 }
260273 };
274+
261275 private PropertyChangeListener classPathListener = new PropertyChangeListener () {
262276 public void propertyChange (PropertyChangeEvent evt ) {
263277 logger .log (Level .FINE , "Classpath event: {0}" , evt );
@@ -349,9 +363,8 @@ public FileObject getAssetFileObject(String name) {
349363 }
350364 synchronized (classPathItems ) {
351365 // TODO I need to find out if classPathItems contains all jars added to a project
352- Iterator <ClassPathItem > classPathItemsIter = classPathItems .iterator ();
353- while (classPathItemsIter .hasNext ()) {
354- ClassPathItem classPathItem = classPathItemsIter .next ();
366+
367+ for (ClassPathItem classPathItem : classPathItems ) {
355368 FileObject jarFile = classPathItem .object ;
356369
357370 Enumeration <FileObject > jarEntry = (Enumeration <FileObject >) jarFile .getChildren (true );
0 commit comments