Building Tomcat6 on MacPorts fails on building jakarta-taglibs-standard-11 due to Maven 1.9.4 present in the MacPorts repo. The error manifests itself like this:
... [javac] /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_java_jakarta-taglibs-standard-11/jakarta-taglibs-standard-11/work/jakarta-taglibs-standard-1.1.2-src/standard/build.xml:178: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 236 source files to /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_java_jakarta-taglibs-standard-11/jakarta-taglibs-standard-11/work/jakarta-taglibs-standard-1.1.2-src/standard/build/standard/standard/classes [javac] Fatal Error: Unable to find package java.lang in classpath or bootclasspath BUILD FAILED /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_java_jakarta-taglibs-standard-11/jakarta-taglibs-standard-11/work/jakarta-taglibs-standard-1.1.2-src/standard/build.xml:178: Compile failed; see the compiler error output for details. ...
The build can be fixed by downgrading Ant:
cd ~ svn co -r 94758 http://svn.macports.org/repository/macports/trunk/dports/devel/apache-ant cd apache-ant sudo port install
Now tomcat can be installed from ports:
sudo port install tomcat6
Starting tomcat now shows we need some further customization:
# sudo port load tomcat6 # sudo less /opt/local/share/java/tomcat6/logs/catalina.err 2015-06-17 20:25:42.976 jsvc[587:5132] Apple AWT Java VM was loaded on first thread -- can't start AWT. Jun 17, 2015 8:25:42 PM org.apache.catalina.startup.Bootstrap initClassLoaders SEVERE: Class loader creation threw exception java.lang.InternalError: Can't start the AWT because Java was started on the first thread. Make sure StartOnFirstThread is not specified in your application's Info.plist or on the command line at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1833) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1730) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1044) at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.loadLibraries(Toolkit.java:1605) at java.awt.Toolkit.(Toolkit.java:1627) at sun.awt.AppContext$2.run(AppContext.java:240) at sun.awt.AppContext$2.run(AppContext.java:226) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.AppContext.initMainAppContext(AppContext.java:226) at sun.awt.AppContext.access$200(AppContext.java:112) at sun.awt.AppContext$3.run(AppContext.java:306) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.AppContext.getAppContext(AppContext.java:287) at com.sun.jmx.trace.Trace.out(Trace.java:180) at com.sun.jmx.trace.Trace.isSelected(Trace.java:88) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.isTraceOn(DefaultMBeanServerInterceptor.java:1830) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:929) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:916) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312) at com.sun.jmx.mbeanserver.JmxMBeanServer$2.run(JmxMBeanServer.java:1195) at java.security.AccessController.doPrivileged(Native Method) at com.sun.jmx.mbeanserver.JmxMBeanServer.initialize(JmxMBeanServer.java:1193) at com.sun.jmx.mbeanserver.JmxMBeanServer. (JmxMBeanServer.java:225) at com.sun.jmx.mbeanserver.JmxMBeanServer. (JmxMBeanServer.java:170) at com.sun.jmx.mbeanserver.JmxMBeanServer.newMBeanServer(JmxMBeanServer.java:1401) at javax.management.MBeanServerBuilder.newMBeanServer(MBeanServerBuilder.java:93) at javax.management.MBeanServerFactory.newMBeanServer(MBeanServerFactory.java:311) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:214) at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:175) at sun.management.ManagementFactory.createPlatformMBeanServer(ManagementFactory.java:302) at java.lang.management.ManagementFactory.getPlatformMBeanServer(ManagementFactory.java:504) at org.apache.catalina.startup.Bootstrap.createClassLoader(Bootstrap.java:183) at org.apache.catalina.startup.Bootstrap.initClassLoaders(Bootstrap.java:92) at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:207) at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:275) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
That rings a bell. We need to run headless! To customize MacPort's Tomcat, edit setenv.local:
# sudo vi /opt/local/share/java/tomcat6/conf/setenv.local
This example is to use JDK1.7 and some self-signed certificate magic [setenv.local]
JAVA_JVM_VERSION=1.7 JAVA_OPTS="-Djava.awt.headless=true -XX:PermSize=500m -XX:MaxPermSize=800m -Xmx2g -Djavax.net.ssl.keyStore=/Users/doma/.keystore -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit"
Restart Tomcat6:
sudo port unload tomcat6 sudo port load tomcat6
Did we fix it?
# sudo less /opt/local/share/java/tomcat6/logs/catalina.err Jun 17, 2015 9:29:37 PM org.apache.catalina.core.AprLifecycleListener init INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java Jun 17, 2015 9:29:37 PM org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080 Jun 17, 2015 9:29:37 PM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 507 ms Jun 17, 2015 9:29:37 PM org.apache.catalina.core.StandardService start INFO: Starting service Catalina Jun 17, 2015 9:29:37 PM org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/6.0.35 Jun 17, 2015 9:29:37 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor host-manager.xml Jun 17, 2015 9:29:38 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor manager.xml Jun 17, 2015 9:29:38 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory docs Jun 17, 2015 9:29:38 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory examples Jun 17, 2015 9:29:38 PM org.apache.catalina.core.ApplicationContext log INFO: ContextListener: contextInitialized() Jun 17, 2015 9:29:38 PM org.apache.catalina.core.ApplicationContext log INFO: SessionListener: contextInitialized() Jun 17, 2015 9:29:38 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory ROOT Jun 17, 2015 9:29:38 PM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 Jun 17, 2015 9:29:38 PM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 Jun 17, 2015 9:29:38 PM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/18 config=null Jun 17, 2015 9:29:38 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 710 ms
Et voila. Tomcat started.
Background
The same process can be applied to downgrade anything in the ports tree. To find the proper release, see https://trac.macports.org/log/trunk/dports/devel/apache-ant
To see which versions you are currently having:
# sudo port installed apache-ant The following ports are currently installed: apache-ant @1.8.4_0 (active) apache-ant @1.9.4_0
To use 1.9.4 again:
# sudo port activate apache-ant @1.9.4_0 ---> Deactivating apache-ant @1.8.4_0 ---> Cleaning apache-ant ---> Activating apache-ant @1.9.4_0 ---> Cleaning apache-ant # ant -version Apache Ant(TM) version 1.9.4 compiled on April 29 2014
Reference: https://trac.macports.org/wiki/howto/InstallingOlderPort