jar在运行时不可用,为什么不呢?

时间:2015-01-08 00:18:40

标签: eclipse spring maven spring-mvc tomcat

我正在使用eclipse来开发和测试spring mvc应用程序。我在开发过程中经常使用Run as...Run on server来测试较小的更改。我遇到了ClassNotFound错误,其解决方案似乎涉及将几个jar移动到tomcat 8 lib目录中,以便它们在运行时可用。 (包含jar的类在eclipse中的应用程序构建路径中。)将jar移动到tomcat lib文件夹的问题是在编译时也需要jar。当我将jar移至$CATALINA_HOME/lib时,由于jar位于我的pom.xml中,我收到错误消息,表明存在重复的广告。但如果我从pom.xml删除它,eclipse将无法编译该应用。 如何将jar移动到$ CATALINA_HOME / lib并仍然使用eclipse编译我的应用程序?

我尝试设置<scope>runtime</scope><scope>provided</scope>,但这些都没有解决问题。以下是我在pom.xml中的内容:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
    <scope>provided</scope>
</dependency>  

编辑#1:

我还尝试将jar移至tomcat lib文件夹,然后将jar添加到buildpath中的eclipse作为外部jar这样我就可以从pom.xml中删除依赖项,并且仍然可以eclipse编译应用程序。但是当我这样做时,eclipse每次尝试Run As..Run on Server时都会给我以下错误:

Several ports (8080, 8009) required by Tomcat v8.0 Server at localhost are  
already in use. The server may already be running in another process, or a  
system process may be using the port. To start this server you will need to  
stop the other process or change the port number(s).  

当然,我转到tomcat bin文件夹并运行shutdown.sh,但这并没有阻止新错误。

编辑#2

当我通过点击红色按钮从tomcat内关闭eclipse时,eclipse表示tomcat已停止。但是,当我再次尝试restart tomcat尝试Run As..Run on Server时,我会收到上面EDIT#1中描述的错误。当我完全关闭计算机并重新启动时,会临时解决此错误。然后我可以再次Run As..Run on Server并重新创建情境。只是现在抛出了一个新的错误。我记录了the new error in a separate posting。但是,每当我尝试连续EDIT#1次启动以测试代码中的小变化时,我都会从Run As..Run on Server收到同样的错误消息问题。 因此,当前问题未得到解决,因为将java mail jar放入tomcat lib文件夹并使用提供的范围,每次我想要从eclipse内重新启动应用时,都需要重新启动。< / strong> shutdown.sh也不起作用。

2 个答案:

答案 0 :(得分:1)

you can write lib launch file which you can run on maven install.
Inside launchConfiguration mentioned string attribute like below 
<stringAttribute key="M2_GOALS" value="clean package install"/>
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
<booleanAttribute key="M2_OFFLINE" value="false"/>
<stringAttribute key="M2_PROFILES" value=""/>
<listAttribute key="M2_PROPERTIES"/>
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
<intAttribute key="M2_THREADS" value="1"/>
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
<stringAttribute key="M2_USER_SETTINGS" value=""/>
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_45"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace:/Lib}"/>

This will compile all the jar file and put it into lib folder in webapp directory

答案 1 :(得分:0)

好的,我重读了你的帖子,我想我已经钉了它。要杀死该Tomcat实例,请按Eclipse中Console窗口中的红色按钮。 shutdown.sh可能无法关闭它。

根据JAR文件,您需要在Tomcat lib目录和Maven依赖项中使用它们。如果它们是“提供”的,它们将在编译和测试时使用,但不会被部署(这是您所期望的)。然后,您需要将它们复制到tomcat / lib目录中以避免冲突。