簡體   English   中英

在Linux機器上指定軟件包位置的最佳方法

[英]best way to specify packages location on linux machine

我有幾個servlet,它們導入了許多軟件包:

import java.util.*;
import java.security.*; 
import java.util.Date;
import java.util.Properties;
import java.util.ResourceBundle;
import java.io.*;
import java.io.FileWriter;
import javax.naming.*;
import java.text.SimpleDateFormat;
import javax.naming.Context;
import javax.naming.NamingEnumeration;  
import javax.naming.NamingException;  
import javax.naming.directory.SearchControls;  
import javax.naming.directory.SearchResult; 
import javax.naming.ldap.*; 
import javax.naming.ldap.InitialLdapContext;  
import javax.naming.ldap.LdapContext; 
import javax.naming.directory.*;
import javax.naming.directory.Attribute;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem; 
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.activation.*;
import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Cipher; 
import java.security.KeyStore;
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.DriverManager;
import org.apache.commons.codec.binary.Base64;

我的CLASSPATH包含以下內容:

echo $CLASSPATH
.:/usr/lib64/jvm/java:/usr/lib64/logi-lib:/usr/share/java:/usr/share/tomcat6/lib

因此,我的問題是,在編譯和運行這些servlet時,是否必須分別指定每個軟件包的每個路徑,是否需要更改web.xml文件中除以下代碼之外的任何內容?

   ...
    <servlet>
          <servlet-name>SendEmail</servlet-name>
      <servlet-class>SendEmail</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>SendResetEmailLink</servlet-name>
      <servlet-class>SendResetEmailLink</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SendEmail</servlet-name>
        <url-pattern>/SendEmail</url-pattern>
    </servlet-mapping>  
        <servlet-mapping>
        <servlet-name>SendResetEmailLink</servlet-name>
        <url-pattern>/SendResetEmailLink</url-pattern>
    </servlet-mapping>
    ...

編譯和運行是完全不同的兩件事。

對於編譯,這些類必須位於與編譯器關聯的類路徑中,通常在大多數稱為構建路徑的工具中。 您確實應該使用開發工具進行構建,例如Eclipse。 在那里,您可以輕松指定所有必需的罐子。 在您的情況下,只有Java運行時和Tomcat庫。

為了運行它們,它們必須可用於運行時環境;如果您運行servlet,則它們必須可用於Web容器,或者通過容器類路徑中的jar或隨應用程序一起提供。 快速瀏覽一下,您應該擁有的所有導入都應由Tomcat提供,而沒有任何其他jar。

我必須分別指定每個軟件包的每個路徑嗎?

不,通常您會提供jar的路徑(包含許多軟件包的歸檔文件)。

關於導入列表-如果在導入中提供*,則已經導入了給定包中的所有類,因此,如果您具有:

import javax.naming.directory.*;

//then these are obsolete:
import javax.naming.directory.SearchControls;  
import javax.naming.directory.SearchResult; 
import javax.naming.directory.Attribute;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem; 

// however it is only on package level, not recursive so
import javax.naming.*;
// doesn't import automatically javax.naming.ldap.*; and you will need to provide it also
import javax.naming.ldap.*;

好的開發工具還將檢測您的班級未使用的導入,並且您將能夠刪除它們。 例如,您寧願在使用servlet時也不使用java.awt.* ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM