Java структура каталога проекта затмения EE?

Я пытаюсь установить демонстрационный динамический веб-проект в Eclipse с помощью Java EE, Spring и Знаток (использующий менеджера репозитория Nexus). Я задавался вопросом, знает ли кто-либо структуру каталогов "лучшей практики", которую я должен установить для веб-приложения предприятия в Eclipse? Я должен просто придерживаться структуры по умолчанию, которая является установкой для меня? Я спрашиваю, потому что, осматривая Интернет я вижу широкое изменение (например, где папки WEB-INF и META-INF.. если существует 'военный' каталог и т.д.).Спасибо!

5
задан jim 19 January 2010 в 02:53
поделиться

2 ответа

Если вы используете Maven, я бы прогрелся, чтобы просто следовать Конвенцию Мавена . Это «лучшая практика» в мире Maven (и я не вижу никаких веских причин, чтобы не делать этого, не следовав на этом совете приведет к большему количеству работы).

Одним из простых способов создания проекта WebApp является использование Maven-ArchEtype-WebApp:

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp \
                       -DgroupId=com.mycompany.app \
                       -DartifactId=my-webapp \
                       -Dversion=1.0-SNAPSHOT 

(вы можете вставить эту команду «как есть» в оболочке Linux; в Windows, введите все на одну строку без «\» .).)

И это структура, которую вы получите:

my-webapp
|-- pom.xml
`-- src
    `-- main
        |-- resources
        `-- webapp
            |-- WEB-INF
            |   `-- web.xml
            `-- index.jsp

Этот макет соответствует Eclipse WTP (какой-либо плагин, который вы используете для интеграции Eclipse). Просто импортируйте этот проект в Eclipse и там вы идете.

Если у вас есть более конкретный вопрос, не стесняйтесь спрашивать (например, большую часть времени вам не нужно беспокоиться о каталоге Meta-inf , но положить его под SRC / Главная / Ресурсы Если на самом деле вам нужно иметь его).

7
ответ дан 14 December 2019 в 01:08
поделиться

Если вы используете Maven, лучше следовать их конвенции .

Если вы используете Spring, вам не нужна EAR. WAR подойдет.

В файле WAR есть определенный стандарт, которому вы должны следовать. До тех пор, пока вы можете сгенерировать правильный файл WAR, вы можете использовать любую структуру каталогов для вашего исходного кода, которая имеет для вас смысл.

Я использую нечто подобное:

/project
+---/src (.java)
+---/test (TestNG .java here)
+---/test-lib (testNG JAR, Spring test JAR, etc.)
+---/resources (log4j.xml, etc.)
+---/web (root of web content here)
+---+---/WEB-INF
+---+---+---/classes (compile .java to this directory)
+---+---+---/lib (JAR files)

Я использую IntelliJ, так что он создает взломанный WAR-файл для меня.

У меня есть Ant build.xml, который обычно следует структуре каталога IntelliJ. Вы можете приписать его, если сочтете это полезным.

<?xml version="1.0" encoding="UTF-8"?>
<project name="xslt-converter" basedir="." default="package">

    <property name="version" value="1.6"/>
    <property name="haltonfailure" value="no"/>

    <property name="out" value="out"/>

    <property name="production.src" value="src"/>
    <property name="production.lib" value="lib"/>
    <property name="production.resources" value="config"/>
    <property name="production.classes" value="${out}/production/${ant.project.name}"/>

    <property name="test.src" value="test"/>
    <property name="test.lib" value="lib"/>
    <property name="test.resources" value="config"/>
    <property name="test.classes" value="${out}/test/${ant.project.name}"/>

    <property name="exploded" value="out/exploded/${ant.project.name}"/>
    <property name="exploded.classes" value="${exploded}/WEB-INF/classes"/>
    <property name="exploded.lib" value="${exploded}/WEB-INF/lib"/>

    <property name="reports.out" value="${out}/reports"/>
    <property name="junit.out" value="${reports.out}/junit"/>
    <property name="testng.out" value="${reports.out}/testng"/>

    <path id="production.class.path">
        <pathelement location="${production.classes}"/>
        <pathelement location="${production.resources}"/>
        <fileset dir="${production.lib}">
            <include name="**/*.jar"/>
            <exclude name="**/junit*.jar"/>
            <exclude name="**/*test*.jar"/>
        </fileset>
    </path>

    <path id="test.class.path">                            
        <path refid="production.class.path"/>
        <pathelement location="${test.classes}"/>
        <pathelement location="${test.resources}"/>
        <fileset dir="${test.lib}">
            <include name="**/junit*.jar"/>
            <include name="**/*test*.jar"/>
        </fileset>
    </path>

    <path id="testng.class.path">
        <fileset dir="${test.lib}">
            <include name="**/testng*.jar"/>
        </fileset>
    </path>

    <available file="${out}" property="outputExists"/>

    <target name="clean" description="remove all generated artifacts" if="outputExists">
        <delete dir="${out}" includeEmptyDirs="true"/>
        <delete dir="${reports.out}" includeEmptyDirs="true"/>
    </target>

    <target name="create" description="create the output directories" unless="outputExists">
        <mkdir dir="${production.classes}"/>
        <mkdir dir="${test.classes}"/>
        <mkdir dir="${reports.out}"/>
        <mkdir dir="${junit.out}"/>
        <mkdir dir="${testng.out}"/>
        <mkdir dir="${exploded.classes}"/>
        <mkdir dir="${exploded.lib}"/>
    </target>

    <target name="compile" description="compile all .java source files" depends="create">
        <!-- Debug output
                <property name="production.class.path" refid="production.class.path"/>
                <echo message="${production.class.path}"/>
        -->
        <javac srcdir="src" destdir="${out}/production/${ant.project.name}" debug="on" source="${version}">
            <classpath refid="production.class.path"/>
            <include name="**/*.java"/>
            <exclude name="**/*Test.java"/>
        </javac>
        <javac srcdir="${test.src}" destdir="${out}/test/${ant.project.name}" debug="on" source="${version}">
            <classpath refid="test.class.path"/>
            <include name="**/*Test.java"/>
        </javac>
    </target>

    <target name="junit-test" description="run all junit tests" depends="compile">
        <!-- Debug output
                <property name="test.class.path" refid="test.class.path"/>
                <echo message="${test.class.path}"/>
        -->
        <junit printsummary="yes" haltonfailure="${haltonfailure}">
            <classpath refid="test.class.path"/>
            <formatter type="xml"/>
            <batchtest fork="yes" todir="${junit.out}">
                <fileset dir="${test.src}">
                    <include name="**/*Test.java"/>
                </fileset>
            </batchtest>
        </junit>
        <junitreport todir="${junit.out}">
            <fileset dir="${junit.out}">
                <include name="TEST-*.xml"/>
            </fileset>
            <report todir="${junit.out}" format="frames"/>
        </junitreport>
    </target>

    <taskdef resource="testngtasks" classpathref="testng.class.path"/>
    <target name="testng-test" description="run all testng tests" depends="compile">
        <!-- Debug output
                <property name="test.class.path" refid="test.class.path"/>
                <echo message="${test.class.path}"/>
        -->
        <testng classpathref="test.class.path" outputDir="${testng.out}" haltOnFailure="${haltonfailure}" verbose="2" parallel="methods" threadcount="50">
            <classfileset dir="${out}/test/${ant.project.name}" includes="**/*.class"/>
        </testng>
    </target>

    <target name="exploded" description="create exploded deployment" depends="testng-test">
        <copy todir="${exploded.classes}">
            <fileset dir="${production.classes}"/>
        </copy>
        <copy todir="${exploded.lib}">
            <fileset dir="${production.lib}"/>
        </copy>
    </target>

    <target name="package" description="create package file" depends="exploded">
        <jar destfile="${out}/${ant.project.name}.jar" basedir="${production.classes}" includes="**/*.class"/>
    </target>

</project>
2
ответ дан 14 December 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: