Как я могу проверить CSS на внутренних веб-страницах?

17

Я хочу проверить внутренние веб-страницы, поэтому я не могу напрямую использовать службу W3C validation . Мне удалось запустить проверку подлинности XHTML локально, однако у меня есть некоторые проблемы с css-validator. Я действительно не хочу настраивать Tomcat или Jigsaw , чтобы иметь возможность запускать Java-сервлет, а параметр командной строки дает мне сообщение об ошибке

Exception in thread "main" java.lang.NoClassDefFoundError: 
org.w3c.tools.resources.ProtocolException at 
org.w3c.css.css.CssValidator.main(CssValidator.java:164)

Как я могу проверить локальный CSS в ящике Linux?

    
задан txwikinger 16.07.2009 в 16:11
источник
  • См. мой обновленный ответ с инструкциями по сборке. –  Sinan Ünür 16.07.2009 в 17:12
  • ... или см. мой обновленный ответ, который автоматизирует все это! stackoverflow.com/a/3303298/357774 –  Noyo 05.02.2014 в 17:34
  • Почему люди такие узкие? Нет оснований закрывать этот вопрос ... но тогда кого это волнует! –  txwikinger 31.03.2015 в 15:23

3 ответа

8

Вы можете вызвать валидатор W3C из командной строки:

  

Использование командной строки

     

Любой компьютер с установленной Java может   также запустить валидатор из   терминал / консоль в качестве командной строки   инструмент. Загрузите css-validator.jar   jar архив (или построить его с банкой муравья)   и запустите его как:

     

java -jar css-validator.jar http://www.w3.org/      

Примечание: файл css-validator.jar должен   располагаться на том же уровне, что и   папка lib / для правильной работы.

Обновление: . Чтобы заставить его работать, я проверил полный дистрибутив из CVS и выполнил ant , используя включенный build.xml . Он загрузил все зависимости, кроме servlet.jar . Чтобы справиться с этим, я загрузил двоичный дистрибутив Tomcat 6 и извлек его. Затем я редактировал build.xml для css-validator , чтобы отобразить местоположение servlet.lib :

<property name="servlet.lib" 
 value="E:/Downloads/apache-tomcat-6.0.20/lib/servlet-api.jar"/>

Затем снова побежал ant . Это вызвало файл css-validator.jar на верхнем уровне каталога, извлеченного из CVS, с подкаталогом lib , содержащим другой jar s, от которого это зависит. Затем я смог успешно запустить валидатор:

C:\Temp\validator02\css-validator> java -jar css-validator.jar http://www.unur.com/     

ответ дан Sinan Ünür 16.07.2009 в 16:14
  • Ну .. я пробовал это, но я получаю сообщение об ошибке. Я не уверен, что понимаю смысл этой заметки. Он не работает, если он помещен в папку / lib. Какая папка lib предназначена здесь? –  txwikinger 16.07.2009 в 16:23
  • Я думаю, что понял. Я загрузил исходный код из CVS из dev.w3.org/cvsweb/2002/css-validator ... Я еще не построил его, но похоже, что запуск валидатора из командной строки все еще должен быть в контексте Jigsaw. Я думаю, что это каталог / lib, на который ссылаются документы. –  Sinan Ünür 16.07.2009 в 16:37
  • Спасибо. Это решило мою проблему! –  txwikinger 16.07.2009 в 17:43
  • Очевидно, что servlet.jar Jigsaw теперь включен в источник css-validator: 2002 / css-validator / tmp / Jigsaw / classes / servlet.jar –  kojiro 18.01.2013 в 04:35
  • Я добавил упрощенное, написанное по сценарию решение для ленивого ниже. Просто скопируйте-вставьте и подождите! –  Noyo 12.07.2013 в 16:23
11

Этот jar запущен, но ему нужны дополнительные библиотеки.

Изучите файл MANIFEST.MF :

$ unzip -p css-validator.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.0
Created-By: 1.6.0_26-b03 (Sun Microsystems Inc.)
Main-Class: org.w3c.css.css.CssValidator
Class-Path: . lib/commons-collections-3.2.1.jar lib/commons-lang-2.6.j
 ar lib/jigsaw.jar lib/tagsoup-1.2.jar lib/velocity-1.7.jar lib/xerces
 Impl.jar lib/xml-apis.jar lib/htmlparser-1.3.1.jar

Вам нужны все банки, упомянутые в Class-Path . Вы можете загрузить их из maven репозитория , используя этот скрипт:

#!/bin/bash

set -e

mkdir -p lib
curl -LO http://www.w3.org/QA/Tools/css-validator/css-validator.jar
echo "\
http://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
http://repo1.maven.org/maven2/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
http://repo1.maven.org/maven2/org/w3c/jigsaw/jigsaw/2.2.6/jigsaw-2.2.6.jar jigsaw.jar
http://repo1.maven.org/maven2/org/ccil/cowan/tagsoup/tagsoup/1.2/tagsoup-1.2.jar
http://repo1.maven.org/maven2/org/apache/velocity/velocity/1.7/velocity-1.7.jar
http://repo1.maven.org/maven2/xerces/xercesImpl/2.11.0/xercesImpl-2.11.0.jar xercesImpl.jar
http://repo1.maven.org/maven2/nu/validator/htmlparser/htmlparser/1.2.1/htmlparser-1.2.1.jar\
" | while read url shortname; do
        if [ -z "$shortname" ]; then
            shortname="${url##*/}"
        fi
        curl -L -o "lib/${shortname}" "${url}"
    done

После этого он работает:

$ java -jar css-validator.jar --output=soap12 file:badcss.html
{vextwarning=false, output=soap12, lang=en, warning=2, medium=all, profile=css3}
<?xml version='1.0' encoding="utf-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
    <env:Body>
        <m:cssvalidationresponse
            env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
            xmlns:m="http://www.w3.org/2005/07/css-validator">
            <m:uri>file:badcss.html</m:uri>
            <m:checkedby>http://jigsaw.w3.org/css-validator/</m:checkedby>
            <m:csslevel>css3</m:csslevel>
            <m:date>2013-03-12T06:40:09Z</m:date>
            <m:validity>false</m:validity>
            <m:result>
                <m:errors xml:lang="en">
                    <m:errorcount>1</m:errorcount>

                <m:errorlist>
                    <m:uri>file:badcss.html</m:uri>

                        <m:error>
                            <m:line>8</m:line>
                            <m:errortype>parse-error</m:errortype>
                            <m:context> h1 </m:context>        
                            <m:errorsubtype>
                                exp
                            </m:errorsubtype>
                            <m:skippedstring>
                                100%
                            </m:skippedstring>

                            <m:message>

                                Property fnt-size doesn&#39;t exist : 
                            </m:message>
                        </m:error>

                    </m:errorlist>

                </m:errors>
                <m:warnings xml:lang="en">
                    <m:warningcount>1</m:warningcount>

                    <m:warninglist>
                        <m:uri>file:badcss.html</m:uri>

                        <m:warning>
                            <m:line>5</m:line>
                            <m:level>0</m:level>
                            <m:message>You should add a &#39;type&#39; attribute with a value of &#39;text/css&#39; to the &#39;style&#39; element</m:message>
                        </m:warning>

                    </m:warninglist>
                    </m:warnings>
            </m:result>
        </m:cssvalidationresponse>
    </env:Body>
</env:Envelope>
    
ответ дан andrewdotn 12.03.2013 в 19:43
  • Пропуск пути для lib / xml-apis.jar, кажется, отсутствует? –  Slaven Rezic 01.02.2014 в 13:04
  • @SlavenRezic Этот jar имеет интерфейсы в пакете javax.xml, но теперь они включены в Java. Вам нужно только добавить его для очень старых версий Java, которые его не включают. Если вы загрузите JAR, он даже не будет использоваться, если вы не используете механизм одобренных стандартов. –  andrewdotn 02.02.2014 в 02:54
  • Этот скрипт меня закрыл, но css-validator также требует директорию org из дерева CVS. Ответ @ Noyo содержит отсутствующий бит: env CVSROOT =: pserver: anonymous: [email protected]: / sources / public cvs checkout 2002 / css-validator; mv 2002 / css-validator / org /. –  Arnon Weinberg 22.03.2015 в 23:13
  • Это должен быть признанный ответ! Смешно, что эти библиотеки не включены в загружаемый JAR, и что он не говорит в документации, что их нет! Благодарю вас @ andrewdotn! –  Rikki 11.12.2016 в 17:30
5

Для лени, вот сценарий, который я написал, чтобы сделать то, что предлагает Синан:

#!/bin/sh
# W3C CSS Validator Install Script --------------
# installs W3C CSS Validator
# requires: ant, wget, javac
# see: http://jigsaw.w3.org/css-validator/DOWNLOAD.html
# see: http://esw.w3.org/CssValidator
# see: http://thecodetrain.co.uk/2009/02/running-the-w3c-css-validator-locally-from-the-command-line/
# see: http://stackoverflow.com/a/3303298/357774
##wget "http://www.w3.org/QA/Tools/css-validator/css-validator.jar"
#sudo aptitude install -y ant # uncomment if you don't have ant
CVSROOT=:pserver:anonymous:[email protected]:/sources/public cvs checkout 2002/css-validator 
mkdir 2002/css-validator/lib
TOMCAT6_VERSION='6.0.45'
wget "http://www.apache.org/dist/tomcat/tomcat-6/v$TOMCAT6_VERSION/bin/apache-tomcat-$TOMCAT6_VERSION.tar.gz"
tar xvf apache-tomcat-$TOMCAT6_VERSION.tar.gz
mv apache-tomcat-$TOMCAT6_VERSION/lib/servlet-api.jar 2002/css-validator/lib/servlet.jar
rm -rf apache-tomcat-$TOMCAT6_VERSION apache-tomcat-$TOMCAT6_VERSION.tar.gz
cd 2002/css-validator
ant jar
# usage example: java -jar css-validator.jar "http://csszengarden.com/"

Это должно работать, по крайней мере, до тех пор, пока следующее обновление зависимостей программного обеспечения не разрушит скрипт сборки муравьев (не стесняйтесь параметризовать версии).

Надеюсь, это поможет!

    
ответ дан Noyo 21.07.2010 в 21:57
  • 404 на ссылке для загрузки, вот текущая: newverhost.com/pub/tomcat/tomcat-6/v6.0.29/bin/... –  Nona Urbiz 20.12.2010 в 23:24
  • Спасибо! Я обновил сценарий, чтобы захватить $ TOMCAT6_VERSION (легко обновляемый тем, кто хочет использовать скрипт) непосредственно из apache. –  Noyo 21.12.2010 в 18:03
  • Обновлено снова, июль 2013 года. –  Noyo 12.07.2013 в 16:10
  • Я обновил версию Tomcat выше, но перед запуском ant jar мне также нужно было изменить номер версии, используя sed -i 's / commons-collections-3.2.1 / commons-collections-3.2.2 / g' build.xml. Если кто-то может подтвердить, что это правильно, мы можем обновить сценарий выше. –  Chris Haas 30.06.2016 в 23:38