JavaScript起動方法と起動順序
JavaScriptを起動する方法は幾つかありますが、どの起動が早いのか試してみました。
(IE6,7,8では動作しません。動作確認してみたい場合はutf-8でファイルを保存してください)
launch_test01.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>JavaScript起動テスト</title> <script src="js/launch_test01.js"></script> </head> <body> <div id="sample01">div="sample01"のdivタグですよ</div> </body> </html>
js/launch_test01.js
document.addEventListener("DOMContentLoaded",function(){ alert('1番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); },false); window.onload = function() { alert('2番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); } window.addEventListener("load",function(){ alert('3番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); },false);
DOMContentLoadedはDOM構築が終わった直後に実行されるので早いです。
window.onloadは画像の読み込みが終わるまで待つので遅いです。(この例では画像は無いですが)
次にjQueryのready(fn)が早いとの事なので試してみました。
launch_test02.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>JavaScript起動テスト</title> <script src="js/jquery.js"></script> <script src="js/launch_test02.js"></script> </head> <body> <div id="sample01">div="sample01"のdivタグですよ</div> </body> </html>
js/launch_test02.js
$(document).ready(function(){ alert('1番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); }); document.addEventListener("DOMContentLoaded",function(){ alert('2番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); },false); window.onload = function() { alert('3番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); } window.addEventListener("load",function(){ alert('4番目に実行されました。'); var test = document.getElementById('sample01'); alert(test.innerHTML); },false);
確かにjQueryのready(fn)が一番早いです(実装順序を変えても動作に変更なし)。
普通のプロジェクトで使う場合は、ブラウザ非依存で安定のready(fn)ですが、
jQueryを使わないような簡単なサンプルコードの動作確認には、同じくブラウザ非依存のwindow.onloadを使っています。
document.addEventListenerは古いIEでは動かないのと、コード量がちょっとだけ多いのでほぼ使ってません。。
参考にしたサイト
■JavaScript メモ / チップス attachEvent() と addEventListener() [ ARTEMIS ] http://www.artemis.ac/contents/javascript/jsmemo6.htm
■javascript - element.onload vs element.addEventListener("load",callbak,false) - Stack Overflow http://stackoverflow.com/questions/6902033/element-onload-vs-element-addeventlistenerload-callbak-false
■HTML4から変化したHTML5のマークアップ ここが違う!サンプルで見るHTML5(2) (1/3):CodeZine http://codezine.jp/article/detail/5600
m2eプラグインのエラーと対策
何かの拍子でMavenプロジェクトでエラーが発生するようになりました。
Eclipseを起動する度にエラー・ログに以下のような内容がバラバラと出力されました。
!MESSAGE バンドル org.eclipse.m2e.core (965) を自動的に有効化している間にエラーが発生しました。 !STACK 0 org.osgi.framework.BundleException: バンドル org.eclipse.m2e.core の org.eclipse.m2e.core.internal.MavenPluginActivator.start() での例外。 at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:107) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.m2e.jdt.MavenJdtPlugin.start(MavenJdtPlugin.java:90) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:107) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340) at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229) at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212) at org.eclipse.core.internal.registry.osgi.RegistryStrategyosgi.createExecutableExtension(RegistryStrategyosgi.java:174) at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) at org.eclipse.jdt.core.JavaCore.computeClasspathContainerInitializer(JavaCore.java:3175) at org.eclipse.jdt.core.JavaCore.getClasspathContainerInitializer(JavaCore.java:3151) at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2824) at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:2749) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2789) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1873) at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3886) at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:36) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Caused by: java.lang.NoClassDefFoundError: com/google/inject/internal/util/$ImmutableList at com.google.inject.internal.Errors.(Errors.java:642) at com.google.inject.internal.InternalInjectorCreator. (InternalInjectorCreator.java:62) at com.google.inject.Guice.createInjector(Guice.java:94) at com.google.inject.Guice.createInjector(Guice.java:71) at com.google.inject.Guice.createInjector(Guice.java:61) at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:470) at org.codehaus.plexus.DefaultPlexusContainer. (DefaultPlexusContainer.java:196) at org.codehaus.plexus.DefaultPlexusContainer. (DefaultPlexusContainer.java:160) at org.eclipse.m2e.core.internal.MavenPluginActivator.start(MavenPluginActivator.java:182) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) ... 50 more Caused by: java.lang.ClassNotFoundException: com.google.inject.internal.util.$ImmutableList at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 62 more Root exception: java.lang.NoClassDefFoundError: com/google/inject/internal/util/$ImmutableList at com.google.inject.internal.Errors. (Errors.java:642) at com.google.inject.internal.InternalInjectorCreator. (InternalInjectorCreator.java:62) at com.google.inject.Guice.createInjector(Guice.java:94) at com.google.inject.Guice.createInjector(Guice.java:71) at com.google.inject.Guice.createInjector(Guice.java:61) at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:470) at org.codehaus.plexus.DefaultPlexusContainer. (DefaultPlexusContainer.java:196) at org.codehaus.plexus.DefaultPlexusContainer. (DefaultPlexusContainer.java:160) at org.eclipse.m2e.core.internal.MavenPluginActivator.start(MavenPluginActivator.java:182) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:107) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.m2e.jdt.MavenJdtPlugin.start(MavenJdtPlugin.java:90) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:107) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340) at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229) at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212) at org.eclipse.core.internal.registry.osgi.RegistryStrategyosgi.createExecutableExtension(RegistryStrategyosgi.java:174) at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) at org.eclipse.jdt.core.JavaCore.computeClasspathContainerInitializer(JavaCore.java:3175) at org.eclipse.jdt.core.JavaCore.getClasspathContainerInitializer(JavaCore.java:3151) at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2824) at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:2749) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2789) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1873) at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3886) at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:36) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Caused by: java.lang.ClassNotFoundException: com.google.inject.internal.util.$ImmutableList at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 62 more
他にもこんなエラー・ログが。。
!MESSAGE ビルダー 'org.eclipse.m2e.core.maven2Builder' のインスタンスの作成でエラーが発生しました。 !STACK 1 org.eclipse.core.runtime.CoreException: プラグイン org.eclipse.m2e.core はクラス org.eclipse.m2e.core.internal.builder.MavenBuilder をロードできませんでした。 at org.eclipse.core.internal.registry.osgi.RegistryStrategyosgi.throwException(RegistryStrategyosgi.java:194) at org.eclipse.core.internal.registry.osgi.RegistryStrategyosgi.createExecutableExtension(RegistryStrategyosgi.java:176) at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) at org.eclipse.core.internal.events.BuildManager.instantiateBuilder(BuildManager.java:896) at org.eclipse.core.internal.events.BuildManager.initializeBuilder(BuildManager.java:849) at org.eclipse.core.internal.events.BuildManager.getBuilder(BuildManager.java:538) at org.eclipse.core.internal.events.BuildManager.getBuilder(BuildManager.java:567) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:237) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Caused by: org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter$TerminatingClassNotFoundException: バンドル org.eclipse.m2e.core (965) を自動的に有効化している間にエラーが発生しました。 at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:122) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.m2e.jdt.MavenJdtPlugin.start(MavenJdtPlugin.java:90) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:107) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340) at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229) at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212) at org.eclipse.core.internal.registry.osgi.RegistryStrategyosgi.createExecutableExtension(RegistryStrategyosgi.java:174) at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) at org.eclipse.jdt.core.JavaCore.computeClasspathContainerInitializer(JavaCore.java:3175) at org.eclipse.jdt.core.JavaCore.getClasspathContainerInitializer(JavaCore.java:3151) at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:2824) at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:2749) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:2789) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1873) at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:3886) at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:36) ... 1 more Caused by: org.osgi.framework.BundleException: バンドル org.eclipse.m2e.core の org.eclipse.m2e.core.internal.MavenPluginActivator.start() での例外。 at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263) at org.eclipse.core.runtime.internal.adaptor.eclipseLazyStarter.postFindLocalClass(eclipseLazyStarter.java:107) ... 44 more Caused by: java.lang.NoClassDefFoundError: com/google/inject/internal/util/$ImmutableList at com.google.inject.internal.Errors.(Errors.java:642) at com.google.inject.internal.InternalInjectorCreator. (InternalInjectorCreator.java:62) at com.google.inject.Guice.createInjector(Guice.java:94) at com.google.inject.Guice.createInjector(Guice.java:71) at com.google.inject.Guice.createInjector(Guice.java:61) at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:470) at org.codehaus.plexus.DefaultPlexusContainer. (DefaultPlexusContainer.java:196) at org.codehaus.plexus.DefaultPlexusContainer. (DefaultPlexusContainer.java:160) at org.eclipse.m2e.core.internal.MavenPluginActivator.start(MavenPluginActivator.java:182) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) ... 50 more Caused by: java.lang.ClassNotFoundException: com.google.inject.internal.util.$ImmutableList at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 62 more
特にMavenプラグインを弄ったわけでもないのに、クラスが見つからない的なエラーが収まらない感じ。
何かの操作でMavenプラグイン関連のjarのクラスパスが外れたのかな?という憶測で
とりあえず以下の操作を実施したところ、問題なく動作するようになりました。
[ヘルプ] --> [更新の確認] --> 全プラグインを更新 --> eclipseを再起動
Maven3とEclipseの設定
実施したこと
実行の前提条件
- Windows 7
- Javaがインストール済であること。
--> 本環境では1.7.0_09 64bit版 - Eclipseがインストール済であること。
--> 本環境ではpleiades-e4.2-ultimate
各種Eclipseプラグインの導入を省略化する上でも
Pleiades All in One 日本語ディストリビューションのUltimateもしくはJavaを推奨します。
http://mergedoc.sourceforge.jp/
Maven3のインストールおよび設定
- Maven 3.0.4をダウンロードする。 http://maven.apache.org/
- zipファイルを以下のフォルダに展開する。 C:\maven
- システム環境変数にMAVEN_HOMEを新規に追加する。
- システム環境変数にmavenの実行パスを追加する。
- 実行確認 コマンドプロンプト上でmvn -versionを実行し、以下のように表示されれば成功。
- maven用のrepositoryフォルダを作成する。 C:\mavenフォルダ上にrepositoryフォルダを新規作成する。
- mavenの設定ファイルにローカルレポジトリを設定する。 C:\maven\conf\settings.xmlファイルを以下のように変更する。
変数名 : MAVEN_HOME
変数値 : C:\maven
変数名 : Path
変数値 : xxxx;%MAVEN_HOME%\bin;
(※)xxxxは既存の設定値C:\>mvn -version Apache Maven 3.0.4 (r1232337; 2012-01-17 17:44:56+0900) Maven home: C:\maven\bin\.. ~省略~
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
↓以下のように変更する。
<!-- localRepository | The path to the local repository maven will use to store artifacts. | | Default: ~/.m2/repository --> <localRepository>C:/maven/repository</localRepository>
(※) インターネットにアクセスする為に社内プロキシ等を経由する必要がある場合
以下のサイトを参考にすると良いです。(Maven2, Maven3どちらも同じ設定)
http://www.jxpath.com/maven2/step1/proxy.html
EclipseのMavenプラグイン(m2e)の設定
- Eclipseを起動し、[ウィンドウ] --> [設定]を選択する。
- [設定]ウィンドウで[Maven] --> [ユーザー設定]を選択し、
ユーザー設定ファイルを[C:\maven\conf\settings.xml]に設定して[適用]ボタンを押す。
Eclipse上でのMavenプロジェクト作成
- パッケージエクスプローラー上で右クリックし、[新規] --> [その他]を選択する。
- [新規]ウィンドウで、[Maven] --> [Mavenプロジェクト]を選択し、[次へ]を押す。
- [プロジェクト名およびロケーションの選択]で
[デフォルト・ワークスペース・ロケーション]を指定されたままの状態で[次へ]を押す。
(※) ロケーションが網掛け状態&任意のフォルダパスが表示されているが無視してOK。 - [アーキタイプの選択]で以下を選択した状態で[次へ]を押す。
グループId : org.apache.maven.archetypes
アーティファクトID : maven-archetype-quickstart - グループIdとアーティファクトIdを以下に設定し、[完了]を押す。
グループId : test01
アーティファクトId : MavenProjectTest01
ライブラリの自動取得
次にpom.xmlファイルに任意のライブラリを指定することで、ライブラリのjarをmavenの機能で自動取得させてみる。
Maven POMエディターの入力保管機能を利用する方法
- pom.xmlファイルをMaven POMエディターで開き、
Maven POMエディターの下部に表示されている[依存関係]タブを開き、以下の手順で編集する。 - [追加]ボタンを押す。
- [グループID、アーティファクトIDまたはsha1接頭部またはパターン(*)の入力]のフォームに追加したいライブラリ名を記入する。
例:log4jと記入すると、[検索結果]欄にたくさん表示されるので、
適当なもの(org.apache.logging.log4jのapiやcore等)を選択すると 、
[グループId]、[アーティファクトId]、[バージョン]欄が自動的に設定される。 - [OK]ボタンを押す。
- Ctrl+Sでpom.xmlファイルを保存すると、
C:\maven\repositoryフォルダ配下にpom.xmlフォルダ配下にjarファイル群がダウンロードされます。
pom.xmlを直接編集する方法
- pom.xmlファイルをMaven POMエディターで開き、 Maven POMエディターの下部に表示されている[pom.xml]タブを開き、以下の手順で編集する。
- Ctrl+Sでpom.xmlファイルを保存すると、 C:\maven\repository\org\codehaus\jacksonフォルダ配下にjarファイル群がダウンロードされます。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>↓以下のように変更する。(※)この例ではjacksonを指定してみました。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.2</version> </dependency> </dependencies>