mttn572のプログラミングメモ

プログラムに関するメモを残していきます。 Twitterはこちら。https://twitter.com/mttn572

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のインストールおよび設定

  1. Maven 3.0.4をダウンロードする。
  2. http://maven.apache.org/
  3. zipファイルを以下のフォルダに展開する。
  4. C:\maven
  5. システム環境変数MAVEN_HOMEを新規に追加する。
  6. 変数名 : MAVEN_HOME

    変数値 : C:\maven

  7. システム環境変数mavenの実行パスを追加する。
  8. 変数名 : Path

    変数値 : xxxx;%MAVEN_HOME%\bin;

    (※)xxxxは既存の設定値
  9. 実行確認
  10. コマンドプロンプト上でmvn -versionを実行し、以下のように表示されれば成功。
    C:\>mvn -version
    Apache Maven 3.0.4 (r1232337; 2012-01-17 17:44:56+0900)
    Maven home: C:\maven\bin\..
    ~省略~
    
  11. maven用のrepositoryフォルダを作成する。
  12. C:\mavenフォルダ上にrepositoryフォルダを新規作成する。
  13. mavenの設定ファイルにローカルレポジトリを設定する。
  14. C:\maven\conf\settings.xmlファイルを以下のように変更する。
  <!-- 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

EclipseMavenプラグイン(m2e)の設定

  1. Eclipseを起動し、[ウィンドウ] --> [設定]を選択する。
  2. [設定]ウィンドウで[Maven] --> [ユーザー設定]を選択し、
    ユーザー設定ファイルを[C:\maven\conf\settings.xml]に設定して[適用]ボタンを押す。

Eclipse上でのMavenプロジェクト作成

  1. パッケージエクスプローラー上で右クリックし、[新規] --> [その他]を選択する。
  2. [新規]ウィンドウで、[Maven] --> [Mavenプロジェクト]を選択し、[次へ]を押す。
  3. [プロジェクト名およびロケーションの選択]で
    [デフォルト・ワークスペース・ロケーション]を指定されたままの状態で[次へ]を押す。
    (※) ロケーションが網掛け状態&任意のフォルダパスが表示されているが無視してOK。
  4. [アーキタイプの選択]で以下を選択した状態で[次へ]を押す。
    グループId : org.apache.maven.archetypes
    アーティファクトID : maven-archetype-quickstart
  5. グループIdとアーティファクトIdを以下に設定し、[完了]を押す。
    グループId : test01
    アーティファクトId : MavenProjectTest01

ライブラリの自動取得

次にpom.xmlファイルに任意のライブラリを指定することで、ライブラリのjarをmavenの機能で自動取得させてみる。

  1. Eclipse上で[MavenProjectTest01]プロジェクトにあるpom.xmlファイルを開く。
  2. pom.xmlファイルの編集
    pom.xmlファイルの編集には以下の2つの方法があります。
  • Maven POMエディターの入力保管機能を利用する方法
  • pom.xmlを直接編集する方法

Maven POMエディターの入力保管機能を利用する方法

  1. pom.xmlファイルをMaven POMエディターで開き、
    Maven POMエディターの下部に表示されている[依存関係]タブを開き、以下の手順で編集する。
  2. [追加]ボタンを押す。
  3. [グループID、アーティファクトIDまたはsha1接頭部またはパターン(*)の入力]のフォームに追加したいライブラリ名を記入する。
    例:log4jと記入すると、[検索結果]欄にたくさん表示されるので、
    適当なもの(org.apache.logging.log4japiやcore等)を選択すると 、
    [グループId]、[アーティファクトId]、[バージョン]欄が自動的に設定される。
  4. [OK]ボタンを押す。
  5. Ctrl+Sでpom.xmlファイルを保存すると、
    C:\maven\repositoryフォルダ配下にpom.xmlフォルダ配下にjarファイル群がダウンロードされます。

pom.xmlを直接編集する方法

  1. pom.xmlファイルをMaven POMエディターで開き、
  2. Maven POMエディターの下部に表示されている[pom.xml]タブを開き、以下の手順で編集する。
      <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>
    
  3. Ctrl+Sでpom.xmlファイルを保存すると、
  4. C:\maven\repository\org\codehaus\jacksonフォルダ配下にjarファイル群がダウンロードされます。