как создать сайт загрузки с помощью Maven - PullRequest
3 голосов
/ 23 июля 2010

Я новичок в Maven и пытаюсь выполнить простую задачу:

  1. build jar package и веб-сайт [DONE]
  2. развертывание их на удаленном сервере через scp [DONE]
  3. сайт должен содержать страницу загрузки со ссылками на развернутые файлы jar [MISSING]

Я не хочу использовать архивы или подобные инструменты.Я просто хочу иметь (статическую, сгенерированную) страницу на веб-сайте со ссылками на все встроенные файлы jar (или только на последнюю сборку).

Я пытался:

  1. положить <item name="Downloads" href="download.html"/> в site.xml
  2. mvn commons:download-page
  3. mvn deploy site:deploy

Что я получаю: эти команды копируют файл JAR вудаленный сервер:

{deploy-dir}/com.acme.etc/ArtifactID/0.0.2-SNAPSHOT/ArtifactID-0.0.2-SNAPSHOT.jar

сгенерированная страница загрузки указывает на

{deploy-dir}/target/site/[preferred]/commons/ArtifactID/binaries/ArtifactID-bin.tar.gz

Также на сгенерированной странице загрузки есть некоторые метки, например [if-any logo][end].Я полагаю, сервер должен выполнить сценарий вместо отображения HTML.Однако я не могу этого сделать, так как сервер мне не принадлежит.

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 июля 2010

После начала развертывания метаданные проекта содержат окончательную версию. Вот отрывок pom со скриптом groovy, который создает страницу ссылки на основе этих метаданных и впоследствии развертывает ее, используя deploy: deploy-file

<properties>

    <!-- The base URL of your repository -->
    <linkpage.repobaseurl>http://www.my.maven.repo/public</linkpage.repobaseurl>

    <!-- The download page file -->
    <linkpage.file>${project.build.directory}/downloadpage.html</linkpage.file>
</properties>
<build>
    <plugins>

        <plugin>
            <groupId>org.codehaus.groovy.maven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.0</version>
            <executions>
                <execution>
                    <id>build-links</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source>
                            <![CDATA[
def uniqueVersion = null;
pom.artifact.metadataList.each{
    if(it.class.simpleName=='ProjectArtifactMetadata'){
        def afi = it.class.superclass.getDeclaredField('artifact');
        afi.accessible = true;
        // this is the final version we need for the URLs
        uniqueVersion = it.artifact.version;
    }
};
def repoBase = pom.properties['linkpage.repobaseurl'];
def downloadPage = new File(pom.properties['linkpage.file']);

// build list of artifacts
def listOfArtifacts = [];
// main artifact
listOfArtifacts.add(pom.artifact);
// attached artifacts like sources, javadocs etc
listOfArtifacts.addAll(pom.attachedArtifacts);

def str = '';
listOfArtifacts.each{
    def cls = it.classifier != null ? '-' + it.classifier : '';
    def vers = (uniqueVersion != null ? uniqueVersion : it.version);
    def parentPath = "${repoBase}/${ pom.groupId.replace( '.' , '/' )}/${pom.artifactId}/${pom.version}/" 
    def path = "${parentPath}${pom.artifactId}-${vers}${cls}.${it.type}" 

    // build the link using a here document
    str += """
<a href="${path}">${it}</a><br />
"""     
}

// now build the page using a here document
downloadPage.text="""
<html>
<head>
<title>Download page for ${project.artifact}</title>
</head>
<body>
<h1>Downloads</h1>
${str}
</body>
</html>
""";
                                    ]]>
                        </source>
                    </configuration>
                </execution>

            </executions>
        </plugin>

        <!-- now we need to manually deploy the download page using deploy:deploy-file -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.5</version>
            <executions>
                <execution>
                    <phase>deploy</phase>
                    <id>deploy-downloadpage</id>
                    <goals>
                        <goal>deploy-file</goal>
                    </goals>
                    <configuration>
                        <file>${linkpage.file}</file>
                        <groupId>${project.groupId}</groupId>
                        <artifactId>${project.artifactId}</artifactId>
                        <version>${project.version}</version>
                        <classifier>download</classifier>
                        <packaging>html</packaging>
                        <uniqueVersion>false</uniqueVersion>
                        <url>${project.distributionManagement.repository.url}</url>
                        <repositoryId>${project.distributionManagement.repository.id}</repositoryId>

                    </configuration>
                </execution>
            </executions>
            <configuration>
            </configuration>
        </plugin>
    </plugins>
</build>
0 голосов
/ 24 июля 2010

(...) сайт должен содержать страницу загрузки со ссылками на развернутые файлы jar [MISSING]

Насколько мне известно, это не поддерживается "из коробки", и яМне не известен ни один плагин, делающий это (commons-build-plugin - это особый плагин для сборок Apache Commons ).

Лучше всего добавитьнастраиваемая страница, включающая выражение Maven для сайта Maven и его фильтрация для создания ссылок на последние версии артефактов.Это фактически то, что делает сам сайт Maven.Из документации Создание контента :

Фильтрация

Примечание: Эта функция доступна в версии 2.0-beta-6 или новееПлагин сайта.

Чтобы отфильтровать свойства в любом поддерживаемом формате документации, добавьте расширение .vm к имени файла.

Например, модуль для веб-сайта Maven содержит src/site/apt/download.apt.vm файл, который использует выражение ${currentVersion} для фильтрации в наборе свойств в POM

Примечание: Скорость используется для применения фильтрации.Поскольку Velocity использует внутри себя точечную нотацию, вы не можете использовать точки в своих свойствах.

Если вы объявите эти свойства в своем POM

<properties>
  <!-- This will not work because the name of the property has a dot in it -->
  <my.property>My value</my.property>
  <!-- This will work because the name of the property has no dot in it -->
  <myProperty>My other value</myProperty>
</properties>

, а затем используете выражение ${my.property} вдокумент, он не будет работать.Если вместо этого вы используете выражение ${myProperty}, оно будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...