Tomcatバージョン:7.0.20
私は次のSpring MVCチュートリアルを進めようとしています: http://static.springsource.org/docs/Spring- MVC-step-by-step/part1.html
このチュートリアルでは、マネージャーを使用してTomcatにデプロイするためのantビルドスクリプトをセットアップします。ただし、Tomcatタスクを実行しようとすると、いくつかの問題が発生します。
最初に、チュートリアルでは、まだorg.Apache.catalina.ant.InstallTask
を使用していますが、これは廃止されているため、org.Apache.catalina.ant.DeployTask
に変更しました。
問題は、Tomcatタスクを実行しようとすると次のようになることです。
Java.lang.NoClassDefFoundError: org/Apache/Tomcat/util/buf/B2CConverter
at org.Apache.catalina.util.Base64.encode(Base64.Java:177)
at org.Apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.Java:204)
at org.Apache.catalina.ant.AbstractCatalinaTask.execute(AbstractCatalinaTask.Java:150)
at org.Apache.catalina.ant.ReloadTask.execute(ReloadTask.Java:45)
at org.Apache.tools.ant.UnknownElement.execute(UnknownElement.Java:291)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.Apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.Java:106)
at org.Apache.tools.ant.Task.perform(Task.Java:348)
at org.Apache.tools.ant.Target.execute(Target.Java:390)
at org.Apache.tools.ant.Target.performTasks(Target.Java:411)
at org.Apache.tools.ant.Project.executeSortedTargets(Project.Java:1399)
at org.Apache.tools.ant.Project.executeTarget(Project.Java:1368)
at org.Apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.Java:41)
at org.Apache.tools.ant.Project.executeTargets(Project.Java:1251)
at org.Apache.tools.ant.Main.runBuild(Main.Java:809)
at org.Apache.tools.ant.Main.startAnt(Main.Java:217)
at org.Apache.tools.ant.launch.Launcher.run(Launcher.Java:280)
at org.Apache.tools.ant.launch.Launcher.main(Launcher.Java:109)
Caused by: Java.lang.ClassNotFoundException: org.Apache.Tomcat.util.buf.B2CConverter
at Java.net.URLClassLoader$1.run(URLClassLoader.Java:202)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(URLClassLoader.Java:190)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:306)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:247)
... 21 more
だから私は少し調べて、Tomcat-utils.jar
がクラスパスにあるべきであるという情報を見つけたので、catalina-ant.jarでファイルセットに追加しましたが、明らかにorg.Apache.Tomcat.util.buf.B2CConverter
クラスはそこにありません。
そこで、次にjar -tf
を使用してjarの調査を開始し、クラスが含まれているかどうかを調べました。 Tomcat-coyote.jar
にクラスがあることがわかりました。これをファイルセットに含めても、問題は解決しません。
誰にもアイデアはありますか?
クラスパスを
<path id="catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!-- * for other app servers - check the docs -->
<fileset dir="${appserver.lib}">
<include name="catalina-ant.jar"/>
<include name="Tomcat-coyote.jar"/>
<include name="Tomcat-util.jar"/>
</fileset>
<fileset dir="${appserver.home}/bin">
<include name="Tomcat-juli.jar"/>
</fileset>
</path>
ジェイソンのように、私はエイダンの答えを試しましたが、うまくいきませんでした。 Tomcat 7では、マネージャーインターフェイスが少し変更されました。 URLで/ manager/listを使用する代わりに、/ manager/text/listを使用する必要があります。そこで、build.xmlのリストタスクを次のように変更しました。
<target name="list" description="List Tomcat applications">
<list url="${Tomcat.manager.url}/text"
username="${Tomcat.manager.username}"
password="${Tomcat.manager.password}"/>
</target>
また、この操作に対して適切な特権を持つように、管理ユーザーに「manager-script」ロールを追加する必要がありました。
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script"/>
同じチュートリアルに従うと、同じエラーが見つかりました。ターゲットが正しく実行されるように、3つの変更を行う必要がありました。
まず、build.xmlの「list」ターゲットを変更して、上記の/ textを追加します。
<target name="list" description="List Tomcat applications">
<list url="${Tomcat.manager.url}/text"
username="${Tomcat.manager.username}"
password="${Tomcat.manager.password}"/>
</target>
次に、catalina antクラスパスを変更します。
<path id="catalina-ant-classpath">
<fileset dir="${appserver.home}/lib">
<include name="catalina-ant.jar"/>
<include name="Tomcat-coyote.jar"/>
<include name="Tomcat-util.jar"/>
</fileset>
<fileset dir="${appserver.home}/bin">
<include name="Tomcat-juli.jar"/>
</fileset>
</path>
そして最後に、これをTomcat-users.xmlファイルに追加します。
<role rolename="manager-script"/>
<user username="Tomcat" password="s3cret" roles="manager-gui,Tomcat,manager-script"/>
そして、それは私のために働いた=)
すべてのantコマンドを機能させるために、build.xmlファイルで「リスト」ターゲットを定義するときにURLを変更する代わりに、build.propertiesファイルでマネージャーのURLを変更できます。
Tomcat.manager.url=http://localhost:8080/manager/text
これは私にとってはうまくいくようでした(Tomcat 7.0.21、OS X):
<path id="catalina-ant-classpath">
<fileset dir="${Tomcat_dir}/lib">
<include name="catalina-ant.jar"/>
<include name="Tomcat-coyote.jar"/>
<include name="Tomcat-util.jar"/>
</fileset>
<fileset dir="${Tomcat_dir}/bin">
<include name="Tomcat-juli.jar"/>
</fileset>
</path>
<taskdef name="deploy" classname="org.Apache.catalina.ant.DeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="undeploy" classname="org.Apache.catalina.ant.UndeployTask" classpathref="catalina-ant-classpath"/>
<taskdef name="list" classname="org.Apache.catalina.ant.ListTask" classpathref="catalina-ant-classpath"/>
また、Tomcat 7向けのCatalina-Antの記事もご覧ください。
http://paulgrenyer.blogspot.co.uk/2011/11/catalina-ant-for-Tomcat-7.html
私のために働いたのは、ビルドパスに4つのjarファイルを追加することでした
実行->構成の実行->プログラムの選択、右側の[クラスパス]タブの選択、[ユーザーエントリ]をクリックし、Tomcatディレクトリから外部4 jarを追加します。
この後、私のbuild.xmlは以前のように実行されます
他の答えはどれも私にとってはうまくいきません。代わりに、Tomcat_HOME/lib/catalina-ant.jar、Tomcat_HOME/lib/Tomcat-coyote.jar、Tomcat_HOME/lib/Tomcat-util.jar、Tomcat_HOME/bin/Tomcat-juli.jarをANT_HOME/libディレクトリにコピーしました。
Classpathrefにこれらのファイルが適切に含まれていないようです。
上記の変更を行い、「ant list」を実行した後、Java.io.FileNotFoundException:..../manager/text/list "としてエラーが発生しました。Eclipseを使用せずにTomcatをインストールディレクトリから起動することで解決しましたTomcatを起動した後、最初にブラウザで「localhost:8080」を試してください。これにより、tomcatsページが表示されるはずです。次に「ant list」を実行してみてください。
三つの事-
Tomcat 7.xを使用している場合catalina-ant-classpathのファイルセットを変更する
<path id="catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!-- * for other app servers - check the docs -->
<fileset dir="${appserver.lib}">
<include name="catalina-ant.jar"/>
<include name="Tomcat-coyote.jar"/>
<include name="Tomcat-util.jar"/>
</fileset>
<fileset dir="${appserver.home}/bin">
<include name="Tomcat-juli.jar"/>
</fileset>
tomcat-users.xmlのユーザーを変更して、manager-scriptとしてのユーザー権限を付与します
http://localhost:8080/manager/text
に変更します私はSpringを初めて使用するか、Tomcatに初めて使用します.build.xmlのサブセクションTomcatタスクに(すべてのTomcatタスクで)クラスパスを追加しようとしていますが、なぜ機能しませんか?.
<taskdef name="deploy" classname="org.Apache.catalina.ant.DeployTask">
<classpath>
<path location="${appserver.home}/lib/catalina-ant.jar"/>
<path location="${appserver.home}/lib/Tomcat-coyote.jar"/>
<path location="${appserver.home}/lib/Tomcat-util.jar"/>
<path location="${appserver.home}/bin/Tomcat-juli.jar"/>
</classpath>
</taskdef>
私はMac OS Xを使用しています。
<!-- ============================================================== -->
<!-- Tomcat tasks - remove these if you don't have Tomcat installed -->
<!-- ============================================================== -->
<path id="catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!-- * for other app servers - check the docs -->
<fileset dir="${appserver.lib}">
<include name="catalina-ant.jar"/>
<include name="Tomcat-coyote.jar"/>
<include name="Tomcat-util.jar"/>
</fileset>
<fileset dir="${appserver.home}/bin">
<include name="Tomcat-juli.jar"/>
</fileset>
</path>
三つの事-
Tomcat 7.xを使用している場合catalina-ant-classpathのファイルセットを変更する
<path id="catalina-ant-classpath">
<fileset dir="${appserver.lib}">
<include name="catalina-ant.jar"/>
<include name="Tomcat-coyote.jar"/>
<include name="Tomcat-util.jar"/>
</fileset>
<fileset dir="${appserver.home}/bin">
<include name="Tomcat-juli.jar"/>
</fileset>
</path>
tomcat-users.xmlのユーザーを変更して、manager-scriptとしてのユーザー権限を付与します
Tomcat.manager.urlプロパティをhttp://localhost:8080/manager/text
に変更します
catalina-ant.jar
ディレクトリからTomcat-coyote.jar
ディレクトリにTomcat-util.jar
Tomcat_home/lib/
およびant_home/lib/
を追加するだけです。
なぜこれが起こっているのか分かりませんが、回避策があります: http://www.coderanch.com/t/553582/Tomcat/Java-lang-NoClassDefFoundError-org-Apache
私は解決策を探しています。それが得られたら、ここに投稿することを忘れないようにします。
Opensuseを使用します。
以前の回答を少し修正することをお勧めします。
ユーザーがmanager-guiとmanager-scriptの両方の役割を持つように構成することは、Tomcat 7のドキュメント 1 で強く推奨されていません。サイトをCSRF攻撃にさらす可能性があります。
ロールごとに異なるパスワードを持つ個別のユーザーを定義する方が安全です。
<role rolename="manager-"/>
<role rolename="manager-script"/>
<user username="admin-gui" password="s3cret1" roles="manager-gui"/>
<user username="admin-script" password="s3cret2" roles="manager-script"/>
一般に、GUIユーザーのユーザー名とパスワードを記憶するだけでよいので、より安全な構成が必要です。